EC_Key を使用して OpenSSL で公開鍵と秘密鍵を作成し、x、y、および d コンポーネントを BigNum 形式で作成しました。
ここで、JWK 標準に従って、これらの Bignum 値を Base64URLEncoded 値に変換したいと考えています。
例えば
{
"kty":"EC",
"crv":"P-256",
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
"use":"enc",
"kid":"1"
}
現在x coordinate
は76638B4D8040018F834AE6D6540B20E1CA95F6A8C61BE6118062918904B5C5A7
ObjC で OpenSSL と JSONKit を使用している間
if (!bigNum) return nil;
/* converting from BIGNUM to binary */
int len = BN_num_bytes(bigNum);
unsigned char *buf = NULL;
buf = (unsigned char *) OPENSSL_malloc (len);
len = BN_bn2bin(bigNum, buf);
NSData *pubData = [NSData dataWithBytesNoCopy:buf length:len freeWhenDone:YES];
NSString *base64EncodedString = [pubData base64EncodedString];
return [base64EncodedString stringWithBase64URLEncoding];
それを変換すると、次のようになりBase64URL encoded string
ます
x:dmOLTYBAAY-DSubWVAsg4cqV9qjGG-YRgGKRiQS1xac
ただし、Jose4J を使用してサーバー上で同じ x 座標をデコードすると、次のように返されます。
53548795424402895049922051400723229099982122334687022963594437126482323424679
これは、Web サイトで入手できるものと似ています: http://www.mobilefish.com/services/big_number/big_number.php
このことから、BigInt の 10 進表現であることが示されます。
すなわち
BigInt を Decimal に変換
10 進数から ASCII 文字列へ
そして、Base64 url エンコーディングへ。
ただし、このプロセスを適用している間、サーバーは JOSE4J ライブラリの JWK パラメータを受け入れません。