Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: 31 #32

Merged
merged 1 commit into from
Jun 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/rsa/import_key.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ function rsa_import_jwk(key: JSONWebKey): RSAKeyParams {
* @param key
*/
function rsa_import_pem_cert(key: string): RSAKeyParams {
const trimmedKey = key.substr(27, key.length - 53);
const trimmedKey = key.substr(27, key.length - 52);
const parseKey = ber_simple(
ber_decode(base64_to_binary(trimmedKey)),
) as RSACertKeyFormat;
Expand All @@ -76,7 +76,7 @@ function rsa_import_pem_cert(key: string): RSAKeyParams {
* @param key PEM encoded key format
*/
function rsa_import_pem_private(key: string): RSAKeyParams {
const trimmedKey = key.substr(31, key.length - 61);
const trimmedKey = key.substr(31, key.length - 60);
const parseKey = ber_simple(
ber_decode(base64_to_binary(trimmedKey)),
) as bigint[];
Expand All @@ -101,7 +101,7 @@ function rsa_import_pem_private(key: string): RSAKeyParams {
* @param key PEM encoded key format
*/
function rsa_import_pem_private_pkcs8(key: string): RSAKeyParams {
const trimmedKey = key.substr(27, key.length - 57);
const trimmedKey = key.substr(27, key.length - 52);
const parseWrappedKey = ber_simple(
ber_decode(base64_to_binary(trimmedKey)),
) as [number, unknown, Uint8Array];
Expand All @@ -128,7 +128,7 @@ function rsa_import_pem_private_pkcs8(key: string): RSAKeyParams {
* @param key PEM encoded key format
*/
function rsa_import_pem_public(key: string): RSAKeyParams {
const trimmedKey = key.substr(26, key.length - 51);
const trimmedKey = key.substr(26, key.length - 50);
const parseKey = ber_simple(
ber_decode(base64_to_binary(trimmedKey)),
) as RSAPublicKeyFormat;
Expand Down
47 changes: 47 additions & 0 deletions tests/rsa/rsa.import_key.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,12 @@ Deno.test("RSA - Import Private Key (PKCS8)", () => {
const e = 65537n;
const d =
675889233296421535959584534071325460876697008626327098961835826056666939623318583538247287416696388446697983317835135300723690022117970081796395234018582764098060974026823771341271141202058228435371968592820841644512299636165137501280011132877728106486853881053264668544941537620562475421678333757690909726581512579603702598150422421865490996288244127528474781858718770957987603681469839575489191876915053252047160475432784849252000744700939988583801783684487872676506769116621572018367654125765915215495461243190782913460732307866572233187464540482209385816659449697777403383908159076257721991916366849321145825505n;
const qi =
74289828655732991195558689791424564707132679819891037249694826356870666658448134417270855397604232230569020096065966539928979441113025455296436655960522783579897346034371763410999278044050901737497683356751868229820180356905837023964589114523481066796348442538273820591008174072287844578937802915493303718997n;
assertEquals(key.e, e);
assertEquals(key.n, n);
assertEquals(key.d, d);
assertEquals(key.qi, qi);
assertEquals(key.length, 256);

// Testing key with trailing newline
Expand All @@ -97,3 +100,47 @@ Deno.test("RSA - Import Private Key (PKCS8)", () => {
assertEquals(key2.n, n);
assertEquals(key2.d, d);
});

Deno.test("RSA - Import RSA Private Key (PEM)", () => {
const raw = `-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAlWeqIOFxsSwBx2cB5tuwLVDD+vvMBapZb7qdE69FdtWL8cz8
Vo2r9vpiziDPLqWu6c73KXORIgh+fHXp5iybMoKqNK9gfFocx2PqwiFiX1dmEmcY
86b0gB38yyaw6YV4KoJwjcRI0bLsgmAIhiyDCtIbmPdAOTDDAK4FM5MfJDHf36vx
nfV7eYiPhezZcpSfmq5yXN9OqYBhytzTdhgV9b50rggdvNElF5GX0wXspMg2emKw
KtF6ZwjVfSch6i0OBJoxIXNslKN2jUclzTAXXWcdxwixXMcGQlQKdLUJAHexK7FA
+T+Q0fESCd365JUlFGQehJA8PBuyi1ilXDUNhQIDAQABAoIBAAVapJjkOLNj85YJ
Aw3aH8SRS/ioVzMjxpaPrjXd9oQP7+GE2k0iwL/Le3N4xFv0VuHs8g64+Ww/YthZ
zxLvKcpOru6k6J+u3gWnjGqTu4dVpeQxGs6Oft1sKwU/uCAiPEBvvLyuhPqI1Ntw
5BVPg+Gvzl/gtRs85rFqoGfs/4pyi2jMEuq7FkTlJYANceczUqKgt0iRZZVV13sO
VMgDU7AY70OSdjJm/YPAhGgDp/sTJMTZcE5Q6LftPZxSfb7wFoq1JGXbGDZ5WPs6
w0KD0+wJuY7Skx5jCNSn1jX5s58o4kZbXZ1n3fAYNB+1bcK4VjFhrPEJAE1ABPnw
t6kteOECgYEAzRS5PHjMCupKDKDZmL7EQH9WOl3Xfi1DfkyapGYlBMkmisvDS4u9
SAW8yu8yqm2Fwz1BQmzSRYTpZbijsG7Cj5MAY0dCX6F1c21HRPtrTNmHHLMGiXu4
op2ca9MBxlyLyS9BzVSM5jYIEu/mZqxLHQshV500//N6NcFVtxP5bKUCgYEAuoAV
cmAj+wMWB00kQwoHKbEzux8s7mPdrWmDoUSRQuxzW8yW1XVbH527UB/xKXvMkpPd
RshWdXUia8XrXC4R7EtkzK5GFJmOMWyZ6syU4e3IFgT/Q7lmL0icT6KEqRcG4di9
dr0NgA6cMKAGTC5AGoGhpWPTGc/NtV2PipDi52ECgYEAkOPZU04M6pFIq89grLfq
s57Dbw0p2G1mR+8bOpcoBE+ROXJokhEyM5ZKIh4I77vdS2kVmDaGALO8qi9fBqHa
N9Gl7n5D+Ih8EIbeWXBACNWOzcn2DmAovEsaXlt/34M3B3apyMW5nlQCNE7luxhz
IRvh/KKG9WYxq5TiWCx2hjkCgYAyzr4JAMQMmBSiPJPKZ6r34ryTF7Un5LD5kys2
/fUM5FmxApV85ZHDlTb4ZxtOD9n1fK7ln6JeMWEFN1AdNrfPReLaGAgjiInCUTHF
U6KjwiGmTgo0qwd5jjB3SXEWl51aXa+P74UEA/btEEtm6ZqxHeupoP5bo88Iv8ph
F4OZQQKBgGnKz25Q/hvwwJk1Ld7WcBi3SL8OAXg8gr88ZCcdWdOKzGR+9RBMgQzz
AQcmTT7Y6U7s4AGRO9TIg9wVS8Y/x3ahI1FUEo7jlMoiSnuRohhduV4Xt/9VWsLq
wnR367+l5s3vpUQx2bhDnFdRazPs5ykF5ZKT2y95VNgqYBhRSpRV
-----END RSA PRIVATE KEY-----`;
const key = RSA.importKey(raw);
const n =
18860626341786571281488823024986320858450594409825894653370543036132043241142573896042059032222842653925236802058387508300831766517210547599910735316414515960981281788934868325895562621846910598716519620622800765932541992515497122274302135166053720433521886017494719475895327062855822141735315456613329660043977602681873027347568355824008701177948209784908095092287571982104446342906805480285143028837509076748632094733769028381835899214426100089454654381383340292544225149266603150745375542089871264998183586873913491071542891188124185517417658034185267204900711933432911892469528812455677450346478816563776340692357n;

const e = 65537n;
const d =
675889233296421535959584534071325460876697008626327098961835826056666939623318583538247287416696388446697983317835135300723690022117970081796395234018582764098060974026823771341271141202058228435371968592820841644512299636165137501280011132877728106486853881053264668544941537620562475421678333757690909726581512579603702598150422421865490996288244127528474781858718770957987603681469839575489191876915053252047160475432784849252000744700939988583801783684487872676506769116621572018367654125765915215495461243190782913460732307866572233187464540482209385816659449697777403383908159076257721991916366849321145825505n;
const qi =
74289828655732991195558689791424564707132679819891037249694826356870666658448134417270855397604232230569020096065966539928979441113025455296436655960522783579897346034371763410999278044050901737497683356751868229820180356905837023964589114523481066796348442538273820591008174072287844578937802915493303718997n;
assertEquals(key.e, e);
assertEquals(key.n, n);
assertEquals(key.d, d);
assertEquals(key.qi, qi);
assertEquals(key.length, 256);
});