问题描述
我使用以下函数verify an iOS assertion object on my server:
const cbor = require("cbor");
const crypto = require("crypto");
function verifyAssertion(assertionString,clientDataString,attestKeyID) {
// Convert Base64 string to Buffer
let assertionBuffer = Buffer.from(assertionString,'base64');
let clientDataBuffer = Buffer.from(clientDataString,'base64');
try {
let assert = cbor.decodeAllSync(assertionBuffer)[0];
console.log(`verifyAssertion() assert: ${assert}`);
let authData = assert.authenticatorData; // buffer
let signature = assert.signature; // buffer
console.log(`verifyAssertion() authData: ${authData}`);
console.log(`verifyAssertion() signature: ${signature}`);
// compute client Data Hash
let clientDataHash = crypto.createHash('sha256').update(clientDataBuffer).digest('base64');
let clientDataHashBuffer = Buffer.from(clientDataHash,'base64');
console.log("clientDataHashBuffer: ",clientDataHashBuffer);
// compute composite hash
let compositeBuffer = Buffer.concat([authData,clientDataHashBuffer]);
let nonce = crypto.createHash('sha256').update(compositeBuffer).digest('base64'); // base64 string
let nonceBuffer = Buffer.from(nonce,'base64');
console.log("nonce: ",nonce);
// load public key
console.log("attestKeyID: ",attestKeyID);
let keyObj = crypto.createPublicKey(attestKeyID);
console.log("keyObj: ",keyObj);
// verify signature
let verifier = crypto.createVerify('sha256').update(nonceBuffer);
let sign_verify = verifier.verify(keyObj,signature);
console.log("sign_verify: ",sign_verify);
} catch (e) {
console.log(`verifyAssertion() error: ${e}`);
}
}
但是,crypto.createPublicKey(attestKeyID)
导致了以下错误:
verifyAssertion() error: Error: error:0909006C:PEM routines:get_name:no start line
-
断言对象(作为 base64 字符串)
-
客户端数据(作为 base64 字符串)
-
keyId 从 generateKey() 生成
到我的服务器:
guard let clientData = try? JSONEncoder().encode(adjustedData) else { return }
let clientDataHash = Data(SHA256.hash(data: clientData))
service.generateAssertion(attestKeyID,clientDataHash: clientDataHash) { assertion,err in
guard error == nil else { return print("generateAssertion() error: \(error)") }
let assertionString = assertion?.base64EncodedString() ?? ""
let clientDataString = clientData.base64EncodedString()
adjustedData["attestKeyID"] = attestKeyID
adjustedData["assertionString"] = assertionString
adjustedData["clientData"] = clientDataString
functions.httpsCallable(name).call(adjustedData){ (result,error) in
completion(result,error)
print("function \(name) completed")
}
}
知道为什么我会收到那个错误吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)