· 9 years ago · Oct 17, 2016, 08:30 AM
1encodedPutPolicy = "eyJzY29wZSI6Im15LWJ1Y2tldDpzdW5mbG93ZXIuanBnIiwiZGVhZGxpbmUiOjE0NTE0OTEyMDAsInJldHVybkJvZHkiOiJ7XCJuYW1lXCI6JChmbmFtZSksXCJzaXplXCI6JChmc2l6ZSksXCJ3XCI6JChpbWFnZUluZm8ud2lkdGgpLFwiaFwiOiQoaW1hZ2VJbmZvLmhlaWdodCksXCJoYXNoXCI6JChldGFnKX0ifQ==";
2SecretKey ="MY_SECRET_KEY";
3
4signdString = "c10e287f2b1e7f547b20a9ebce2aada26ab20ef2"
5
6hash[string_String, method_String : "SHA"] :=
7 FromCharacterCode@
8 Interpreter["HexInteger"]@
9 StringPartition[IntegerString[Hash[string, method], 16], 2];
10
11HMAC[key_String, message_String, method_String: "SHA",
12 blockSize_Integer: 64] :=
13 Module[{char54, char92, key2, ipad, opad}, {char54, char92} =
14 FromCharacterCode /@ {54, 92};
15 key2 =
16 Switch[StringLength@key, blockSize, key, l_ /; l > blockSize,
17 hash[key, method], _,
18 StringPadRight[key, blockSize, FromCharacterCode@0]];
19 ipad =
20 FromCharacterCode[
21 BitXor @@
22 Map[ToCharacterCode, {StringRepeat[char54, blockSize], key2}]];
23 opad =
24 FromCharacterCode[
25 BitXor @@
26 Map[ToCharacterCode, {StringRepeat[char92, blockSize], key2}]];
27 hash@StringJoin[opad, hash@StringJoin[ipad, message]]];
28
29HMAC[SecretKey, encodedPutPolicy]