2018-06-11 23:48:45 +02:00
/ *
2019-01-29 21:47:41 +01:00
Copyright 2018 , 2019 New Vector Ltd
2018-06-11 23:48:45 +02:00
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
"use strict" ;
2018-09-25 18:13:29 +02:00
var Olm = require ( '../olm' ) ;
2018-06-11 23:48:45 +02:00
describe ( "pk" , function ( ) {
2019-01-29 21:47:41 +01:00
var encryption , decryption , signing ;
2018-06-11 23:48:45 +02:00
2018-09-21 17:01:51 +02:00
beforeEach ( function ( done ) {
2018-09-25 18:13:29 +02:00
Olm . init ( ) . then ( function ( ) {
encryption = new Olm . PkEncryption ( ) ;
decryption = new Olm . PkDecryption ( ) ;
2019-01-29 21:47:41 +01:00
signing = new Olm . PkSigning ( ) ;
2018-09-25 18:13:29 +02:00
2018-09-21 17:01:51 +02:00
done ( ) ;
} ) ;
2018-06-11 23:48:45 +02:00
} ) ;
afterEach ( function ( ) {
if ( encryption !== undefined ) {
encryption . free ( ) ;
encryption = undefined ;
}
if ( decryption !== undefined ) {
decryption . free ( ) ;
decryption = undefined ;
}
2019-01-29 21:47:41 +01:00
if ( signing !== undefined ) {
signing . free ( ) ;
signing = undefined ;
}
2018-06-11 23:48:45 +02:00
} ) ;
2018-10-02 13:02:56 +02:00
it ( 'should import & export keys from private parts' , function ( ) {
var alice _private = new Uint8Array ( [
0x77 , 0x07 , 0x6D , 0x0A , 0x73 , 0x18 , 0xA5 , 0x7D ,
0x3C , 0x16 , 0xC1 , 0x72 , 0x51 , 0xB2 , 0x66 , 0x45 ,
0xDF , 0x4C , 0x2F , 0x87 , 0xEB , 0xC0 , 0x99 , 0x2A ,
0xB1 , 0x77 , 0xFB , 0xA5 , 0x1D , 0xB9 , 0x2C , 0x2A
] ) ;
var alice _public = decryption . init _with _private _key ( alice _private ) ;
expect ( alice _public ) . toEqual ( "hSDwCYkwp1R0i33ctD73Wg2/Og0mOBr066SpjqqbTmo" ) ;
var alice _private _out = decryption . get _private _key ( ) ;
expect ( alice _private _out ) . toEqual ( alice _private ) ;
} ) ;
2018-06-11 23:48:45 +02:00
it ( 'should encrypt and decrypt' , function ( ) {
var TEST _TEXT = 'têst1' ;
var pubkey = decryption . generate _key ( ) ;
encryption . set _recipient _key ( pubkey ) ;
var encrypted = encryption . encrypt ( TEST _TEXT ) ;
var decrypted = decryption . decrypt ( encrypted . ephemeral , encrypted . mac , encrypted . ciphertext ) ;
console . log ( TEST _TEXT , "->" , decrypted ) ;
expect ( decrypted ) . toEqual ( TEST _TEXT ) ;
TEST _TEXT = 'hot beverage: ☕' ;
encryption . set _recipient _key ( pubkey ) ;
encrypted = encryption . encrypt ( TEST _TEXT ) ;
decrypted = decryption . decrypt ( encrypted . ephemeral , encrypted . mac , encrypted . ciphertext ) ;
console . log ( TEST _TEXT , "->" , decrypted ) ;
expect ( decrypted ) . toEqual ( TEST _TEXT ) ;
} ) ;
2018-06-28 23:10:36 +02:00
it ( 'should pickle and unpickle' , function ( ) {
var TEST _TEXT = 'têst1' ;
var pubkey = decryption . generate _key ( ) ;
encryption . set _recipient _key ( pubkey ) ;
var encrypted = encryption . encrypt ( TEST _TEXT ) ;
var PICKLE _KEY = 'secret_key' ;
var pickle = decryption . pickle ( PICKLE _KEY ) ;
var new _decryption = new Olm . PkDecryption ( ) ;
var new _pubkey = new _decryption . unpickle ( PICKLE _KEY , pickle ) ;
expect ( new _pubkey ) . toEqual ( pubkey ) ;
var decrypted = new _decryption . decrypt ( encrypted . ephemeral , encrypted . mac , encrypted . ciphertext ) ;
console . log ( TEST _TEXT , "->" , decrypted ) ;
expect ( decrypted ) . toEqual ( TEST _TEXT ) ;
new _decryption . free ( ) ;
} ) ;
2019-01-29 21:47:41 +01:00
it ( 'should sign and verify' , function ( ) {
var seed = new Uint8Array ( [
0x77 , 0x07 , 0x6D , 0x0A , 0x73 , 0x18 , 0xA5 , 0x7D ,
0x3C , 0x16 , 0xC1 , 0x72 , 0x51 , 0xB2 , 0x66 , 0x45 ,
0xDF , 0x4C , 0x2F , 0x87 , 0xEB , 0xC0 , 0x99 , 0x2A ,
0xB1 , 0x77 , 0xFB , 0xA5 , 0x1D , 0xB9 , 0x2C , 0x2A
] ) ;
var TEST _TEXT = "We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty and the pursuit of Happiness." ;
//var seed = signing.generate_seed();
var pubkey = signing . init _with _seed ( seed ) ;
var sig = signing . sign ( TEST _TEXT ) ;
var util = new Olm . Utility ( ) ;
util . ed25519 _verify ( pubkey , TEST _TEXT , sig ) ;
var verifyFailure ;
try {
util . ed25519 _verify ( pubkey , TEST _TEXT , 'p' + sig . slice ( 1 ) ) ;
} catch ( e ) {
verifyFailure = e ;
}
expect ( verifyFailure ) . not . toBeNull ( ) ;
util . free ( ) ;
} ) ;
2018-06-11 23:48:45 +02:00
} ) ;