multibaseKeyToJwk function
Implementation
Map<String, dynamic> multibaseKeyToJwk(String multibaseKey) {
var key = _multibaseToUint8List(multibaseKey);
var indicator = key.sublist(0, 2);
var indicatorHex = bytesToHex(indicator);
key = key.sublist(2);
Map<String, dynamic> jwk = {};
if (indicatorHex == 'ed01') {
jwk['kty'] = 'OKP';
jwk['crv'] = 'Ed25519';
jwk['x'] = removePaddingFromBase64(base64UrlEncode(key));
} else if (indicatorHex == 'ec01') {
jwk['kty'] = 'OKP';
jwk['crv'] = 'X25519';
jwk['x'] = removePaddingFromBase64(base64UrlEncode(key));
} else if (indicatorHex == '8024') {
jwk['kty'] = 'EC';
jwk['crv'] = 'P-256';
var c = getP256();
var pub = c.compressedHexToPublicKey(hex.encode(key));
jwk['x'] = removePaddingFromBase64(base64UrlEncode(
pub.X < BigInt.zero ? intToBytes(pub.X) : unsignedIntToBytes(pub.X)));
jwk['y'] = removePaddingFromBase64(base64UrlEncode(
pub.Y < BigInt.zero ? intToBytes(pub.Y) : unsignedIntToBytes(pub.Y)));
} else if (indicatorHex == 'e701') {
jwk['kty'] = 'EC';
jwk['crv'] = 'secp256k1';
var c = getSecp256k1();
var pub = c.compressedHexToPublicKey(hex.encode(key));
jwk['x'] = removePaddingFromBase64(base64UrlEncode(
pub.X < BigInt.zero ? intToBytes(pub.X) : unsignedIntToBytes(pub.X)));
jwk['y'] = removePaddingFromBase64(base64UrlEncode(
pub.Y < BigInt.zero ? intToBytes(pub.Y) : unsignedIntToBytes(pub.Y)));
} else if (indicatorHex == '8124') {
jwk['kty'] = 'EC';
jwk['crv'] = 'P-384';
var c = getP384();
var pub = c.compressedHexToPublicKey(hex.encode(key));
jwk['x'] = removePaddingFromBase64(base64UrlEncode(
pub.X < BigInt.zero ? intToBytes(pub.X) : unsignedIntToBytes(pub.X)));
jwk['y'] = removePaddingFromBase64(base64UrlEncode(
pub.Y < BigInt.zero ? intToBytes(pub.Y) : unsignedIntToBytes(pub.Y)));
} else if (indicatorHex == '8224') {
jwk['kty'] = 'EC';
jwk['crv'] = 'P-521';
var c = getP521();
var pub = c.compressedHexToPublicKey(hex.encode(key));
jwk['x'] = removePaddingFromBase64(base64UrlEncode(
pub.X < BigInt.zero ? intToBytes(pub.X) : unsignedIntToBytes(pub.X)));
jwk['y'] = removePaddingFromBase64(base64UrlEncode(
pub.Y < BigInt.zero ? intToBytes(pub.Y) : unsignedIntToBytes(pub.Y)));
} else {
throw UnimplementedError(
'Unsupported multicodec indicator 0x$indicatorHex');
}
return jwk;
}