import { RsaKeypair } from '../src/RsaKeypair'; //Testing imports import { expect } from 'chai'; import 'mocha'; import { DIDWriter } from '../src/DecentralizedIdentifier/DIDWriter'; interface Keytest { name: string, encryptedData : string, givePublicKey : boolean, publicKey : string | undefined, privateKey : string | undefined } describe('Encryption RSA', function() { const TestPublicKey : string = "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAhmTX/+1tqkH/ipX5jzeSRYm0lhcy6n1kS3Y3/oWFloRYB8DJeCdm\nesm7Vfs5vafXp4ZL8Ryw6o429sYsy3hx75PdyUw1+8i2kkCJtsLGiAOXUsCB4KYu\nCBzXMNb7jAeRCTUEZsBCDmDSk1RsVp9kawU94ylSml7oSyGv9vGUNnT0RiTWVKeg\n3ATZvNycdSjUk+1DM9UUGmgdarLT1AQLGovz11g0LLOGLu+kIZ1QU0eE2p4sMkzs\n0bHUvpIfn1P54QSuQd997juHHF8rconIaCgzsNOSzrzDQY5U2QGJvAHSg+eZS77t\n7XuGVZjHP0d/iCd1NQEolW2w4mrp4aI8+QIDAQAB\n-----END RSA PUBLIC KEY-----"; const TestPrivateKey : string = "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAhmTX/+1tqkH/ipX5jzeSRYm0lhcy6n1kS3Y3/oWFloRYB8DJ\neCdmesm7Vfs5vafXp4ZL8Ryw6o429sYsy3hx75PdyUw1+8i2kkCJtsLGiAOXUsCB\n4KYuCBzXMNb7jAeRCTUEZsBCDmDSk1RsVp9kawU94ylSml7oSyGv9vGUNnT0RiTW\nVKeg3ATZvNycdSjUk+1DM9UUGmgdarLT1AQLGovz11g0LLOGLu+kIZ1QU0eE2p4s\nMkzs0bHUvpIfn1P54QSuQd997juHHF8rconIaCgzsNOSzrzDQY5U2QGJvAHSg+eZ\nS77t7XuGVZjHP0d/iCd1NQEolW2w4mrp4aI8+QIDAQABAoIBAAToP77Xk46I9GTC\nDye8lrm1SoPEexZ216etvGOtym/xiylVT8X0YliPbyi3kKctLsGuNK2sJ4WZBcbC\n+7W+QyLFWm7UOpBkBs6WTrD+sbMbtnXOE6/5QWsIao8c+nhlelVEu1FpKcBOpsG8\nbmxHS6pguZ7Gzn5WgtLjewJgVdIbK5JKAcCE2UPNcnT7XIYJcU+L89qdprCfngmL\n+xITilmqCoUm9FZB1bxj4HChuS5CXeAlvUxbEqxLLAbpV7/2ndhxxCOLM4YiOxDf\n/Dg6Mh2Nyf3Vjg5fjYjOTi3ydSHwoy2igFdJIEbU0bc0BBgQzWfdynJBsd27VGPX\n2WqHgFUCgYEAxO9GsO7EabalMeTHBTbrMJWmhRHRv/vTdJyeRkYPeZPBrSthZQVD\naIJTRQUgS9OHRuOOKfaaXhW5HL/1HBbCT0oVmcY1G5y00V6tPvuEjeHTsQClcuWd\nzurNukfiFZCEMEmyWGgP1xnvHbljaSzcLExqnuDmz7FYGKRdad8Ycs8CgYEArrOp\n1EB83CT5/4VNYS0guBs9SST0UaErNvZNZkmH1R17MveMGV/ngT9R7rqxPkT2CbRZ\nWTJZwx1Wt/xTxQZxl9yeWw5MBYg388b/JvWjhTj+p74+LuU0XC1DAyo/ifN1YjmZ\ntYTZ0gsqyRpCEO58SMjtsWpyRUSqSDQvYnF75bcCgYACXvMV7Dn3H9jLSfrPaELa\nmeKgVX+V9R0tmTkalXtYNlwtjokkozSVjIQeH5qs7wYA53ptrOdc3JwW6YS06t06\nASVTbZx0EaXno2EokfSdlKtsxRo40OTeedsyM+1X3x6ISkrYX6BZMZm8XOACgyS/\nb8gU05ZTx8nMuiXZwXLU5wKBgDgC+mxG0MF0SYMXJhwF7/uXICsXYg3Z8pUImwA0\niwxVC27n1087ZGoX9xjnWnRwf8HUxODIN+dKvMb4a5M74aei4FKpXs5XQjkykBPZ\npbfM8jit0hoO+p6jFF0ranu8RuJbPWDpWzzwv6MCfDQZgleDtFGxozl6Lm4/7QFP\nCT45AoGBAIl4KaUAtfbukYthlhKQl32+gjFk2UzG3sAMFvB7pkv4GyqWU+HYm5Il\n131lkz4e5SHjT6Q4Pu9AtSqUJqI1F1aP8WrpAlFZ1NRHbjrrdozfaBQFQoNFQEdX\nwC6nDeCFZNeXkFM/E/B9oo/QsEZL/z1VfyUNKjD+fZqq4SbOcJ71\n-----END RSA PRIVATE KEY-----"; const Msg : string = "Hello World"; const EncryptedMsg : string = "V6UfikNlyInR/0H5Avsbt0QXQma/3Hf39138pl/H1egJ5I5exrpv/OERyynSYPdLKbjmvhBeZWfM8SLR+iuevNgeBKHx5RwO5zOVRRPuBTbLZmLckkxp7q8lh3Ss7Fk5/0llWyFT9QWeX6JciZp8CtsiA6gfKphi14fBfi4LWKWyDajBkHclYbTrHCyXlfIjhUSJPTZIQQFs6WmZw+GPh/ibOu0eLIc9fql5fAGiaqplLOohs7DMvYmZBYX353W4xdgOF29SVicyydODAHgUYuryjFof25ro/KrY8s0aoik68GKHMzmdgXsug1jW0DCSR08c0MBvktc+WVC6ffbDqw=="; const TestSignature = "OI6O5XJB+SH9ar0o2Fh3MuIY5e3WM/r3VS5us3iZ54Bnbt/Mx+zeKLdFMva0xD8dlIxkSnYOl33JiNJqSyiEmZ/6Xx7mfNZFzAy79uVGJAa6vfGskk+BUWkW6DsE1yWmesPJBVteelykEw/wFZ0qDkbcXtii35oU38gUyce9eYkoXufKyrmDLi+AZpbiTR1hMWYzL8HnBJBlUIKNM0vfXzF80GK6enesjW90xUgeMVIMlMgfHTpnTUBxY0QMrfqo685pQOlAMUqlbsW8j8MRbL8lJQ0BrAGtP3yT2/VpS+qMrYspy6Zu5ETXgZotSH65miElkDvH+oDF3XDihs5H7Q=="; let Keytests : Keytest[] = [ {name: "Public & Private Generated", encryptedData: "", givePublicKey: true, publicKey: undefined, privateKey: undefined}, {name: "Public Given", encryptedData: "", givePublicKey: true, publicKey: TestPublicKey, privateKey: undefined}, {name: "Private Given", encryptedData: "", givePublicKey: false, publicKey: TestPublicKey, privateKey: TestPrivateKey} ]; let keyPairs: RsaKeypair[] = []; before('Prepare', function() { }); //Loop over all the test cases for(let i:number= 0; i < Keytests.length; i++) { describe(Keytests[i].name, function() { it('Should import/generate a keypair and get it', function() { this.timeout(20000); //Create key class keyPairs.push( new RsaKeypair( (Keytests[i].givePublicKey)?Keytests[i].publicKey:undefined, Keytests[i].privateKey)); if(Keytests[i].publicKey || Keytests[i].privateKey) { //Test imported keys expect(keyPairs[i].GetPublicKey()).to.deep.equal(Keytests[i].publicKey); expect(keyPairs[i].GetPrivateKey()).to.deep.equal(Keytests[i].privateKey); } else { //Test generated keys expect(keyPairs[i].GetPublicKey()).to.not.be.undefined; expect(keyPairs[i].GetPrivateKey()).to.not.be.undefined; } }); let Encryption : string = ""; it('Should encrypt data when a private key exists', function() { Encryption = keyPairs[i].Encrypt(Msg); if(keyPairs[i].GetPrivateKey() != undefined) { expect(Encryption).to.not.be.empty; } else { expect(Encryption).to.be.empty; } }); it('Should decrypt data and match the encrypted data', function() { let Decryption : string = keyPairs[i].Decrypt( (Encryption)?Encryption:EncryptedMsg); expect(Decryption).to.deep.equal(Msg); }); let Signature : string = ""; it('Should sign data', function() { Signature = keyPairs[i].Sign(Msg); if(keyPairs[i].GetPrivateKey() != undefined) { expect(Signature).to.not.be.empty; } else { expect(Signature).to.be.empty; } }); it('Should verify the signature', function() { expect(keyPairs[i].Verify(Msg,((Signature.length)?Signature:TestSignature))).to.be.true; }); }); } });