Baseline Widely available *
å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
verify()
㯠SubtleCrypto
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ããã¸ã¿ã«ç½²åãæ¤è¨¼ãã¾ãã
弿°ã¨ãã¦ãç½²åãæ¤è¨¼ããããã®éµãã¢ã«ã´ãªãºã åºæã®å¼æ°ãç½²åãç½²åæ¸ã¿å
ãã¼ã¿ãåãã¾ããç½²åãæå¹ãã©ããã示ãè«çå¤ã§å±¥è¡ããã Promise
ãè¿ãã¾ãã
verify(algorithm, key, signature, data)
弿°
algorithm
使ç¨ããã¢ã«ã´ãªãºã ãå®ç¾©ããæååã¾ãã¯ãªãã¸ã§ã¯ãã§ãã¢ã«ã´ãªãºã ã«ãã£ã¦ã¯è¿½å ã®å¼æ°ãããã¾ãã 追å 弿°ã«æå®ãããå¤ã¯ã対å¿ãã sign()
å¼ã³åºãã«æ¸¡ãããå¤ã¨ä¸è´ããªããã°ãªãã¾ããã
"RSASSA-PKCS1-v1_5"
ã¨ããæååãã { "name": "RSASSA-PKCS1-v1_5" }
ã®å½¢ã®æååãæ¸¡ãã¦ãã ãããRsaPssParams
ãæ¸¡ãã¦ãã ãããEcdsaParams
ãæ¸¡ãã¦ãã ããã"HMAC"
ã¨ããæååãã { "name": "HMAC" }
ã®å½¢ã®æååãæ¸¡ãã¦ãã ãããkey
ç½²åã«ç¨ããéµãæ ¼ç´ãã CryptoKey
ãªãã¸ã§ã¯ãã§ãã 対称éµã¢ã«ã´ãªãºã ã§ããã°ç§å¯éµã§ãããå
¬ééµã·ã¹ãã ã§ããã°å
¬ééµã§ãã
signature
ArrayBuffer
ã§ãæ¤è¨¼ããç½²åã§ãã
data
ArrayBuffer
ã§ãç½²åãæ¤è¨¼ããããã®ãã¼ã¿ãå
¥ãã¾ãã
è«çå¤ã§å±¥è¡ããã Promise
ã§ããç½²åãæå¹ãªå ´å㯠true
ãããã§ãªãå ´å㯠false
ã§ãã
以ä¸ã®ä¾å¤ãçºçããå ´åããããã¹ã¯æå¦ããã¾ãã
InvalidAccessError
DOMException
æå·éµããªã¯ã¨ã¹ããããæ¤è¨¼ã¢ã«ã´ãªãºã ã®éµã§ãªãå ´åãã¾ãã¯æªç¥ã®ã¢ã«ã´ãªãºã ãæ¤è¨¼å¦çã«é©ãã¦ããªãã¢ã«ã´ãªãºã ã使ç¨ãããã¨ããå ´åã«çºçãã¾ãã
verify()
ã¡ã½ããã¯ã sign()
ã¡ã½ããã¨åãã¢ã«ã´ãªãºã ã«å¯¾å¿ãã¦ãã¾ãã
ã¡ã¢: GitHub ä¸ã®åä½ä¾ã試ããã¨ãã§ãã¾ãã
RSASSA-PKCS1-v1_5ãã®ã³ã¼ãã¯å ¬ééµã使ç¨ãã¦ç½²åãæ¤è¨¼ãã¾ãã å®å ¨ãªã³ã¼ã㯠GitHub ã§åç §ãã¦ãã ããã
/*
Fetch the contents of the "message" textbox, and encode it
in a form we can use for sign operation.
*/
function getMessageEncoding() {
const messageBox = document.querySelector(".rsassa-pkcs1 #message");
let message = messageBox.value;
let enc = new TextEncoder();
return enc.encode(message);
}
/*
Fetch the encoded message-to-sign and verify it against the stored signature.
* If it checks out, set the "valid" class on the signature.
* Otherwise set the "invalid" class.
*/
async function verifyMessage(publicKey) {
const signatureValue = document.querySelector(
".rsassa-pkcs1 .signature-value",
);
signatureValue.classList.remove("valid", "invalid");
let encoded = getMessageEncoding();
let result = await window.crypto.subtle.verify(
"RSASSA-PKCS1-v1_5",
publicKey,
signature,
encoded,
);
signatureValue.classList.add(result ? "valid" : "invalid");
}
RSA-PSS
ãã®ã³ã¼ãã¯å ¬ééµã使ç¨ãã¦ç½²åãæ¤è¨¼ãã¾ãã å®å ¨ãªã³ã¼ã㯠GitHub ã§åç §ãã¦ãã ããã
/*
Fetch the contents of the "message" textbox, and encode it
in a form we can use for sign operation.
*/
function getMessageEncoding() {
const messageBox = document.querySelector(".rsa-pss #message");
let message = messageBox.value;
let enc = new TextEncoder();
return enc.encode(message);
}
/*
Fetch the encoded message-to-sign and verify it against the stored signature.
* If it checks out, set the "valid" class on the signature.
* Otherwise set the "invalid" class.
*/
async function verifyMessage(publicKey) {
const signatureValue = document.querySelector(".rsa-pss .signature-value");
signatureValue.classList.remove("valid", "invalid");
let encoded = getMessageEncoding();
let result = await window.crypto.subtle.verify(
{
name: "RSA-PSS",
saltLength: 32,
},
publicKey,
signature,
encoded,
);
signatureValue.classList.add(result ? "valid" : "invalid");
}
ECDSA
ãã®ã³ã¼ãã¯å ¬ééµã使ç¨ãã¦ç½²åãæ¤è¨¼ãã¾ãã å®å ¨ãªã³ã¼ã㯠GitHub ã§åç §ãã¦ãã ããã
/*
Fetch the contents of the "message" textbox, and encode it
in a form we can use for sign operation.
*/
function getMessageEncoding() {
const messageBox = document.querySelector(".ecdsa #message");
let message = messageBox.value;
let enc = new TextEncoder();
return enc.encode(message);
}
/*
Fetch the encoded message-to-sign and verify it against the stored signature.
* If it checks out, set the "valid" class on the signature.
* Otherwise set the "invalid" class.
*/
async function verifyMessage(publicKey) {
const signatureValue = document.querySelector(".ecdsa .signature-value");
signatureValue.classList.remove("valid", "invalid");
let encoded = getMessageEncoding();
let result = await window.crypto.subtle.verify(
{
name: "ECDSA",
hash: { name: "SHA-384" },
},
publicKey,
signature,
encoded,
);
signatureValue.classList.add(result ? "valid" : "invalid");
}
HMAC
ãã®ã³ã¼ãã¯ç½²åãæ¤è¨¼ããããã«ç§å¯éµã使ç¨ãã¾ãã å®å ¨ãªã³ã¼ã㯠GitHub ã§åç §ãã¦ãã ããã
/*
Fetch the contents of the "message" textbox, and encode it
in a form we can use for sign operation.
*/
function getMessageEncoding() {
const messageBox = document.querySelector(".hmac #message");
let message = messageBox.value;
let enc = new TextEncoder();
return enc.encode(message);
}
/*
Fetch the encoded message-to-sign and verify it against the stored signature.
* If it checks out, set the "valid" class on the signature.
* Otherwise set the "invalid" class.
*/
async function verifyMessage(key) {
const signatureValue = document.querySelector(".hmac .signature-value");
signatureValue.classList.remove("valid", "invalid");
let encoded = getMessageEncoding();
let result = await window.crypto.subtle.verify(
"HMAC",
key,
signature,
encoded,
);
signatureValue.classList.add(result ? "valid" : "invalid");
}
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
SubtleCrypto.sign()
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4