diff options
Diffstat (limited to 'packages/server/src')
-rw-r--r-- | packages/server/src/helpers/iso/isoCrypto/verifyEC2.test.ts | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/packages/server/src/helpers/iso/isoCrypto/verifyEC2.test.ts b/packages/server/src/helpers/iso/isoCrypto/verifyEC2.test.ts new file mode 100644 index 0000000..f15ba39 --- /dev/null +++ b/packages/server/src/helpers/iso/isoCrypto/verifyEC2.test.ts @@ -0,0 +1,102 @@ +import { assert } from 'https://deno.land/std@0.198.0/assert/mod.ts'; + +import { COSEALG, COSECRV, COSEKEYS, COSEKTY, COSEPublicKeyEC2 } from '../../cose.ts'; +import { verifyEC2 } from './verifyEC2.ts'; +import { unwrapEC2Signature } from './unwrapEC2Signature.ts'; +import { isoBase64URL } from '../index.ts'; + +Deno.test( + 'should verify a signature signed with an P-256 public key', + async () => { + const cosePublicKey: COSEPublicKeyEC2 = new Map(); + cosePublicKey.set(COSEKEYS.kty, COSEKTY.EC2); + cosePublicKey.set(COSEKEYS.alg, COSEALG.ES256); + cosePublicKey.set(COSEKEYS.crv, COSECRV.P256); + cosePublicKey.set( + COSEKEYS.x, + isoBase64URL.toBuffer('_qRi-kwOVobsqJ_1GAHZYfC77QoIdsVFYkx2Mw20UM4'), + ); + cosePublicKey.set( + COSEKEYS.y, + isoBase64URL.toBuffer('BXEathwyOK_uQRmlZ_m4wReHLujSXk_-e3-9co5B2MY'), + ); + + const data = isoBase64URL.toBuffer('Bt81jmu3ieajF4w1at8HmieVOTDymHd7xJguJCUsL-Q'); + const signature = isoBase64URL.toBuffer( + 'MEQCH1h_F7TPTMVh_kwb_ssjD0_2U77bbXazz2ux-P6khLQCIQCutHs9eCBkCIMP3yA9mmNRKEfFd-REmhGY2GbHozaC7w' + ); + + const verified = await verifyEC2({ + cosePublicKey, + data, + signature: unwrapEC2Signature(signature, COSECRV.P256), + }); + + assert(verified); + }, +); + +Deno.test( + 'should verify a signature signed with an P-384 public key', + async () => { + const cosePublicKey: COSEPublicKeyEC2 = new Map(); + cosePublicKey.set(COSEKEYS.kty, COSEKTY.EC2); + cosePublicKey.set(COSEKEYS.alg, COSEALG.ES384); + cosePublicKey.set(COSEKEYS.crv, COSECRV.P384); + cosePublicKey.set( + COSEKEYS.x, + isoBase64URL.toBuffer('pm-0exykk1x0O72S9sm6fl-iXxFrGikjQHi1CgONIiEz_yDJdCPxN453qg6HLkOx'), + ); + cosePublicKey.set( + COSEKEYS.y, + isoBase64URL.toBuffer('2B7yW7sgza8Sf7ifznQlGJqmJxgupkAevUqqOJTWaWBZiQ7sAf-TfAaNBukiz12K'), + ); + + const data = isoBase64URL.toBuffer('D7mI8UwWXv4rpfSQUNqtUXAhZEPbRLugmWclPpJ9m7c'); + const signature = isoBase64URL.toBuffer( + 'MGMCL3lZ2Rjxo5WcmTCdWyB6jTE9PVuduOR_AsJu956J9S_mFNbHP_-MbyWem4dfb5iqAjABJhTRltNl5Y0O4XC7YLNsYKq2WxYQ1HFOMGsr6oNkUPsX3UAr2zeeWL_Tp1VgHeM' + ); + + const verified = await verifyEC2({ + cosePublicKey, + data, + signature: unwrapEC2Signature(signature, COSECRV.P384), + }); + + assert(verified); + }, +); + +Deno.test({ + // This test is currently ignored, as Deno's implementation of `WebCrypto.subtle` API does not + // support the P-521 curve at the moment. + ignore: true, + name: 'should verify a signature signed with an P-521 public key', + async fn() { + const cosePublicKey: COSEPublicKeyEC2 = new Map(); + cosePublicKey.set(COSEKEYS.kty, COSEKTY.EC2); + cosePublicKey.set(COSEKEYS.alg, COSEALG.ES512); + cosePublicKey.set(COSEKEYS.crv, COSECRV.P521); + cosePublicKey.set( + COSEKEYS.x, + isoBase64URL.toBuffer('AaLbnrCvCuQivbknRW50FjdqPQv4NRF9tHsN4QuVQ3sw8uSspd33o-NTBfjg5JzX9rnpbkKDigb6NugmrVjzNMNK'), + ); + cosePublicKey.set( + COSEKEYS.y, + isoBase64URL.toBuffer('AE64axa8L8PkLX5Td0GaX79cLOW9E2-8-ObhL9XT_ih-1XxbGQcA5VhL1gI0xIQq5zYAxgZYey6PmbbqgtcUPRVt'), + ); + + const data = isoBase64URL.toBuffer('5p0h9RZTjLoBlnL2nY5pqOnhGy4q60NzbjDe2rVDR7o'); + const signature = isoBase64URL.toBuffer( + 'MIGHAkFRpbGknlgpETORypMprGBXMkJMfuqgJupy3NcgCOaJJdj3Voz74kV2pjPqkLNpuO9FqVtXeEsUw-jYsBHcMqHZhwJCAQ88uFDJS5g81XVBcLMIgf6ro-F-5jgRAmHx3CRVNGdk81MYbFJhT3hd2w9RdhT8qBG0zzRBXYAcHrKo0qJwQZot' + ); + + const verified = await verifyEC2({ + cosePublicKey, + data, + signature: unwrapEC2Signature(signature, COSECRV.P521), + }); + + assert(verified); + }, +}); |