Commit 4bb455d8 authored by TJ Horner's avatar TJ Horner

Tests

parent 7ba19bbb
node_modules
\ No newline at end of file
node_modules
test
\ No newline at end of file
......@@ -5,6 +5,15 @@ class TelegramPassport {
this.privateKey = privateKey
}
/**
* Decrypts a piece of data given by Telegram Passport
*
* @param {Buffer} data The Passport data to decrypt
* @param {Buffer} hash The hash for the Passport data
* @param {Buffer} secret The secret used to decrypt the Passport data
* @returns {Buffer}
* @memberof TelegramPassport
*/
decryptPassportCredentials(data, hash, secret) {
// Get the secret hash.
var hasher = crypto.createHash("sha512")
......@@ -32,6 +41,26 @@ class TelegramPassport {
return dataCredentialsPadded.slice(dataCredentialsPadded[0], dataCredentialsPadded.byteLength)
}
/**
* Alias for @see {@link decryptPassportCredentials}
*
* @param {Buffer} data The Passport data to decrypt
* @param {Buffer} hash The hash for the Passport data
* @param {Buffer} secret The secret used to decrypt the Passport data
* @returns {Buffer}
* @memberof TelegramPassport
*/
decryptPassportData(data, hash, secret) {
return this.decryptPassportCredentials(data, hash, secret)
}
/**
* Decrypts an entire `passport_data` payload
*
* @param {*} passport The `passport_data` payload from the Bot API
* @returns {Object} The decrypted payload
* @memberof TelegramPassport
*/
decrypt(passport) {
// Decrypt the Passport secret.
var secret = crypto.privateDecrypt({ key: this.privateKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING }, Buffer.from(passport.credentials.secret, "base64"))
......
{
"name": "telegram-passport",
"version": "1.0.4",
"lockfileVersion": 1,
"dependencies": {
"assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true
},
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"chai": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
"integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
"dev": true
},
"check-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
"dev": true
},
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true
},
"deep-eql": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true
},
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true
},
"growl": {
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true
},
"mocha": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
"integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"pathval": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
"dev": true
},
"supports-color": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true
},
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}
......@@ -16,5 +16,9 @@
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "TJ Horner <me@tjhorner.com>",
"license": "GPL-3.0"
"license": "GPL-3.0",
"devDependencies": {
"chai": "^4.1.2",
"mocha": "^5.2.0"
}
}
require('chai').should()
const TelegramPassport = require('..')
const passportResponse = require('./passport_response.json')
const fs = require('fs')
// Load the test private key
var privKey = fs.readFileSync(__dirname + "/private.key")
var encryptedFile = fs.readFileSync(__dirname + "/encrypted_file.jpg")
var decryptedFile = fs.readFileSync(__dirname + "/decrypted_file.jpg")
describe("TelegramPassport", () => {
var passport = new TelegramPassport(privKey)
describe("#decrypt(passportData)", () => {
var decryptedPassport = passport.decrypt(passportResponse)
it("should decrypt the payload field successfully", () => {
decryptedPassport.payload.should.equal("TestPayloadPleaseIgnore")
})
it("should decrypt the address field successfully", () => {
decryptedPassport.address.data.city.should.equal("Some City")
decryptedPassport.address.data.country_code.should.equal("US")
decryptedPassport.address.data.post_code.should.equal("12345")
decryptedPassport.address.data.state.should.equal("Some State")
decryptedPassport.address.data.street_line1.should.equal("Some Address")
decryptedPassport.address.data.street_line2.should.equal("")
})
it("should decrypt the identity_card field successfully", () => {
decryptedPassport.identity_card.data.document_no.should.equal("1234567")
decryptedPassport.identity_card.data.expiry_date.should.equal("01.01.2021")
})
it("should decrypt the personal_details field successfully", () => {
decryptedPassport.personal_details.data.birth_date.should.equal("01.01.2000")
decryptedPassport.personal_details.data.country_code.should.equal("US")
decryptedPassport.personal_details.data.first_name.should.equal("First")
decryptedPassport.personal_details.data.last_name.should.equal("Last")
decryptedPassport.personal_details.data.gender.should.equal("male")
decryptedPassport.personal_details.data.residence_country_code.should.equal("US")
})
})
describe("#decryptPassportData(data, hash, secret)", () => {
it("should decrypt a piece of Passport data (file)", () => {
var decryptedPassport = passport.decrypt(passportResponse)
var file = decryptedPassport.utility_bill.files[0]
var decryptedResult = passport.decryptPassportData(encryptedFile, Buffer.from(file.hash, "base64"), Buffer.from(file.secret, "base64"))
decryptedResult.toString("base64").should.equal(decryptedFile.toString("base64"))
})
})
})
\ No newline at end of file
{
"data": [
{
"type": "personal_details",
"data": "F3M6cMsZ4uR8OrqAEy6Afe5LVjAzvCNxt0J6mbd8+Fqf6NY8b62ZNN/eQ+8c/+jKSXYEJz7qV/kDjEQbqimM6ZWUWPca/nZimEveHZRxYNnMzxDc22MQ42FJZXZIizbTjWV5lKIw7Rsl4xFCuJoin9041m0LZ8e1aGC+04N16RPcBz/lS2E+4WxwzJMuEyVQAxEmxl4LdodLWjncSXsJ9tn5n1IOwJQy3x9Gq5hwBK4cdQ4Dm7z+gVW+ADJxE3Y49fVzPHRHwO1+kGZ7eCtm2qgUeQkx6HpzThfwun76xd0="
},
{
"type": "identity_card",
"data": "8SYU5OTm03+VNMSN+1Mqe7PsGA97Szk5I15a2DlBYj+aa+U2cPF5//kDajEC0F1KFUFaZGaKhxz9tF0b9h7D5G/mZpB/5iFEHAQaJTAdm3O/aGR995pHnhFEGl32FiVxB41w/gPoWTFz5p12DZByAd0N7niPnRH9i9ri1NAErSo=",
"front_side": {
"file_id": "DgADAQADAwADyoDBTAsHNbyB1t3mAg",
"file_date": 1528299109
},
"reverse_side": {
"file_id": "DgADAQADBwADesjATJqR5-zLP_MqAg",
"file_date": 1528299108
}
},
{
"type": "address",
"data": "AFs1SF0o1YRpBBz2drDz33uhNSBCJs9jmiLCs+Ww/vHS6u8fRpll/B7gDC4eWbMA90N0QIBK4d5aeiwF1pqcxswawSL1QgJ7dsKLbYUXGDp1Fn+AryZoFcUeaKRgzo8TjtnBMundobi3X3PA4cMND/tkLskDeJZAnGObZkEpj6i88wBHREoED6q+sXBlbV9G7Ux3wH3zHEsgyuguuGpgFcPJXfGTR31681eRwL8WFJ9ahP/pu0AitVJPSws1l2hfGOPS+Zq3yV2E7JcGmpV4WQ=="
},
{
"type": "utility_bill",
"files": [
{
"file_id": "DgADAQADAwADbrPQTi06GDBWatNRAg",
"file_date": 1532654454
}
]
},
{
"type": "email",
"email": "me@tjhorner.com"
}
],
"credentials": {
"data": "qiih0WWPJfNREm2lkMKahK/pwKkSnidV3WvSt9p3nrxr1hXKU+2CUgTyG6DXS13J+5iXa6YO6gVbTsHIMUaot9bp/6i07NQlXfiAE4kqPNs+f/g9bdtqpcazsCu2Y0aqeyc2+wJYTVNYbeLq3MNzC8P3FBLmA1AV0d/wSn1df5o0zPdqLUbtZPBH9jZvHvcDiYlPK/RTPqUvgfR38VyTco7WtDV4KenONjO4yW9igebyW1H/XhIsUELU/9AS/eRvZkEczsxQqLVAI9PuM45Oyttq4aoyDTf7xSPb9as3qEuYyyJPm19JcPMNUyh8bfqZbhJKgsG6REDKArwBn7F3kRJb/uTgiJyE+AKTD+kak9VXDckyfeAzqavHbrcRiImx93xqBGjbp94X8UfilNdesLlIH+X9VNbqIMdUve8+/gjSXRUnkkQJKeWUCZK3ptbNm3hC8kCYiZOuvWgS3ZfC1OmDCdnxiyDVd1EQZ5+e2uBmyrO+aJb34UR9jqhaXMgzWKi3wSgQiTNfk7jB3QiJ0zOsaePT/phDFxkobvi6jQQ9hxe8Btq1Y/TQVAhKg+E/wcxO1fXQej7tM41ggbXDahWjaqpNd62hJTff0FxvtTx8izYAK8mSXvYYhQ3mBfkZxGFrJ192qQSLcaqPKYSZ5LfrazGLiHGzYhwK88ljn2F+3Z6I8Z7Bp+mVH20mQ4tPD2v/XPZlE6eKWAl+CWKwAKiVvWx2LlE9K133o2T7HEr/iSJHWOwAtnQ0ScdEM1AFZThWKk3eC+7AcdhwsD0rYCTpLIQmvfgMfMyze/OvxXeNvKdV6D2tju+pflq7hsKYRvqu4Vcfwfh2z+pCWMV1OzHNdGwfWjP0nQToMdVgcbdwjttRmYS8JYEOTAt89PvhEisSHIy1BPlkgGG53J9jxNuvklC5Ketsv4XXwt18C29ke2lp7xEPyNWbOokJxNCUe4gLhF3EUS5626tpS9WLWisnhME8bw5pSHVI9FgOQLmJCZFOVh/KxFObyP0anEbTRwS75NOH7UlVZAMzpYIOv6v9BiBo+le8ub0a6Agykh3BLzMmMpqf1/KZXy+W+IEpFwU70ofYhi/oZ/2Y2tc0gpmjlWb4qOKOJrXrzbA2sqijiRaHkY4tnhLyZu+jP2HRBCJsT+PugAL7Qq38/5OeU+ydZxm8LDbsFCv+nxqqlfuUGrVYj1kQeKTGvN+OigBlT4hUgIK4kiXnOJZsxnl3QePZU/FU9Yy7//PHREeULmOhtTE8n7ejizFRI/8APpAltH4LOO+U37bMVxJhi/cW1eJvra7OHaOtvyWtCnndA8TDb71+pHK6L94mIaDmaJdyL2bVuzmR6S5alTp4z+Kk2cs4vKDvHARr8GfuRQ7Up0gmtb73L8KZMVRlGE+gNQV4VTjDERh3ZlH5YfuQwA5cIQ==",
"hash": "k99esNd/oDbXwpG9XAjlQo0VtaaOZ8HcJWKv532rDgU=",
"secret": "hYb+xy6fK0L/74s14mYbU6RAsuFd6kXcOIYU071qrXjtvnH5G9FeFWVxav8Q0rOQ+qFQ3PN3WKZACLe/t+PrtGb4cfvs62TFlX8B4Ay4qiY+vRz0Gjd24f0MpnwR7WoiHQG+2y0XZ6/psTEOHAE2dLQC22xbsRwKd6g+i3dUOzJ5JAQzKoEQoWoYkqYFR/EQE+9/PnBpIlM+JTzf34qwETU7MBgqRISditOWUgu4zrzDfIbt20o2HphJdSeN03tp3v3nqy46MtQwYfHljoLOQ8hWLLWJHD1tlhQ43OTRPX8IuyMzd/qWx53Gu3wmaXS7wPdTNzMr0IzTuXmeVYBo/A=="
}
}
\ No newline at end of file
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEArsdLBzykFn5bZd0HkwxvYOAGd4ueZ/AHg7WgTirKdDCNgoKh
2Q6Cnuxkf04ZuHgB0LpXBwYtahFIsE+wAH2bdrJdSYXZyWaaN62XcAsMTFi7MpCo
ZIWWxHQtv4DVaUArFFBWmcKrKK3MpzneC0KYLhgC4YHe+omcN3AXxW+O1NIaJj6C
g9ugYLIeAcCbq70kdoz35wqJh751ZBmn4WTZCLv3EfOF/U6/hUlmOqbtH8JADe6D
Gw4UVmR6ZtCMtHaH3jFqbAmM8rPFVg2MS/W2LAnzq3mpNOgHbRUYBt5PyZlQX7mk
4Vn2ZBWDwFZgwOMNDrTfNhlgdvbna9nbtvrgvQIDAQABAoIBAAL1ImLj9s7eooNN
wzQM0NGt2M4rEaommKn059qKxNREghCET2LR6QnxbB3vX2YMudMjZBedViVmV3mM
T6kidwACMqvs1OugjdmFWXuu5C1ijwBjDEZvMEbwxFlqP7JBQLleRqjhb24Hyt/F
jelY3iRhiaLxRKmurHMPtYdExQD66gcOIMHNhjxHkNFUfTQKRIHscKGxDz6jNmlP
wxlD0VK2fvdPQHMyht4LeRcGe0YcdqXnfyRXOStejZtiCOdA7WbEu7KLS4bOhsvz
xy3HWC27p6iMMbvlMAwbE16iXGeImIEfvIpN+P6GfjBqt56f7mDrVVmF686uOuxH
+p9XCSECgYEA2StRs4HUaBWRyniMU+G0NNJlCFBLMJ8vWzFeWMlWu/+5mL0AWQmx
uGHVo4oOTKp3BBb5pNTUlDXXqYb8rZ2FyFFfazyO2rGlwkQ6Dm5RIbaBQ951c2H+
NIG0OW0mpouh0wTOQZQOMrxrAjhDQLz+IqD9/islpZExu1Vygm0lWRUCgYEAzgeV
02jq0WJ8o6k4T/or5avJKfXsmzqhyfnnxB92FfzRCwtDGetO/U+x0zH2+IBvTPY7
CFMRN4HMEjdl7RqsRNBsyC6Ow1AMBqcLyTi0DlLyUgibWDK6vv/lB8G29ayJ1SN2
biRRsnU7E6xWhYFX32ICEgOAsje1kROoAX8BgwkCgYEAyVK6W/IIyjDsxcl5Na3w
VGOTW+Crw7heu2iJ8T89U+1ezjSwZNpy0d6IoiIy3WnOCZGO/vp606cSdct45S45
vpmJHq22NREo/G4pcAVe2yUIsrVBJqT6dwyi2fXRNeYOL8StvOeXPfukLBuiZRqP
ceTTcdPoA5QViXhOPpEWZX0CgYB1k/ycNt7zeao52EPL2LCelMfry24pNG/KjXUI
BxBkAfDmxZmYvCJLC+Um6vfP37QlDsyntog3zjpBFx5zDurLJss9/tv4eME0NrbS
MisHlay2xjSpQ+IxSGZTY+jfEYVjfqaCuvVoy+BYHN0Pub4FPLCDyT3z9zkGP1p8
6BdbyQKBgQDTsuBFpgI7MECHguRtSM8kHtsNF+XJnXhond/MhwC2ZHyQwFraHH7q
5r8GPXaWvdLRy4lB7OgxdHeBmrir3p8UoQ8BQDhsGQbDpoON/IpEPHEcyIG1PudW
qRCu3YiABiNyS+zb/k6c59+vhuJ3glD9m8RcEymamSF+WwR7w8+peQ==
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArsdLBzykFn5bZd0Hkwxv
YOAGd4ueZ/AHg7WgTirKdDCNgoKh2Q6Cnuxkf04ZuHgB0LpXBwYtahFIsE+wAH2b
drJdSYXZyWaaN62XcAsMTFi7MpCoZIWWxHQtv4DVaUArFFBWmcKrKK3MpzneC0KY
LhgC4YHe+omcN3AXxW+O1NIaJj6Cg9ugYLIeAcCbq70kdoz35wqJh751ZBmn4WTZ
CLv3EfOF/U6/hUlmOqbtH8JADe6DGw4UVmR6ZtCMtHaH3jFqbAmM8rPFVg2MS/W2
LAnzq3mpNOgHbRUYBt5PyZlQX7mk4Vn2ZBWDwFZgwOMNDrTfNhlgdvbna9nbtvrg
vQIDAQAB
-----END PUBLIC KEY-----
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment