{"ScriptPreparationCode":"let key256, key512;\r\n\r\n(async () =\u003E {\r\nkey256 = (await crypto.subtle.generateKey({\r\n name: \u0027RSA-PSS\u0027,\r\n modulusLength: 2048,\r\n publicExponent: new Uint8Array([1, 0, 1]),\r\n hash: \u0027SHA-256\u0027,\r\n },\r\n false,\r\n [\u0027sign\u0027, \u0027verify\u0027]\r\n)).privateKey;\r\n\r\nkey512 = (await crypto.subtle.generateKey({\r\n name: \u0027RSA-PSS\u0027,\r\n modulusLength: 2048,\r\n publicExponent: new Uint8Array([1, 0, 1]),\r\n hash: \u0027SHA-512\u0027,\r\n },\r\n false,\r\n [\u0027sign\u0027, \u0027verify\u0027]\r\n)).privateKey;\r\n})();\r\n\r\nasync function sign256(path) {\r\n const encoder = new TextEncoder();\r\n const data = encoder.encode(path);\r\n const signature = await crypto.subtle.sign({\r\n name: \u0027RSA-PSS\u0027,\r\n \tsaltLength: 32\r\n }, key256, data);\r\n const hashArray = Array.from(new Uint8Array(signature));\r\n const base64Hash = btoa(String.fromCharCode(...hashArray))\r\n\r\n return base64Hash \u002B \u0027/\u0027 \u002B path;\r\n}\r\n\r\nasync function sign512(path) {\r\n const encoder = new TextEncoder();\r\n const data = encoder.encode(path);\r\n const signature = await crypto.subtle.sign({\r\n name: \u0027RSA-PSS\u0027,\r\n \tsaltLength: 32\r\n }, key512, data);\r\n const hashArray = Array.from(new Uint8Array(signature));\r\n const base64Hash = btoa(String.fromCharCode(...hashArray))\r\n\r\n return base64Hash \u002B \u0027/\u0027 \u002B path;\r\n}","TestCases":[{"Name":"sha512","Code":"sign512(\u0027500x500/top/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png\u0027).then(result =\u003E result)","IsDeferred":false},{"Name":"sha256","Code":"sign256(\u0027500x500/top/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png\u0027).then(result =\u003E result)","IsDeferred":false}]}