1414 * limitations under the License.
1515 */
1616
17- import { expect } from 'chai' ;
18- import { PublicAccount } from '../../../src/model/account/PublicAccount' ;
19- import { NetworkType } from '../../../src/model/blockchain/NetworkType' ;
17+ import { expect } from 'chai' ;
18+ import { PublicAccount } from '../../../src/model/account/PublicAccount' ;
19+ import { NetworkType } from '../../../src/model/blockchain/NetworkType' ;
2020
2121describe ( 'PublicAccount' , ( ) => {
2222 const publicKey = 'b4f12e7c9f6946091e2cb8b6d3a12b50d17ccbbf646386ea27ce2946a7423dcf' ;
@@ -27,3 +27,73 @@ describe('PublicAccount', () => {
2727 expect ( publicAccount . address . plain ( ) ) . to . be . equal ( 'SARNASAS2BIAB6LMFA3FPMGBPGIJGK6IJETM3ZSP' ) ;
2828 } ) ;
2929} ) ;
30+
31+ describe ( 'Signature verification' , ( ) => {
32+ it ( 'Can verify a signature' , ( ) => {
33+ // Arrange:'
34+ const signerPublicAccount = PublicAccount . createFromPublicKey (
35+ '1464953393CE96A08ABA6184601FD08864E910696B060FF7064474726E666CA8' ,
36+ NetworkType . MIJIN_TEST ) ;
37+ const data = 'I am so so so awesome as always' ;
38+ const signature = '2092660F5BD4AE832B2E290F34A76B41506EE473B02FD7FD468B32C80C945CF60A0D60D005FA9B2DB3AD3212F8028C1449D3DCF81C9FAB3EB4975A7409D8D802' ; // tslint:disable-line
39+
40+ // Act & Assert:
41+ expect ( signerPublicAccount . verifySignature ( data , signature ) ) . to . be . true ;
42+ } ) ;
43+
44+ it ( 'Throw error if signature has invalid length' , ( ) => {
45+ // Arrange:
46+ const signerPublicAccount = PublicAccount . createFromPublicKey ( '22816F825B4CACEA334723D51297D8582332D8B875A5829908AAE85831ABB508' ,
47+ NetworkType . MIJIN_TEST ) ;
48+ const data = 'I am so so so awesome as always' ;
49+ const signature = 'B01DCA6484026C2ECDF3C822E64DEAAFC15EBCCE337EEE209C28513CB5351CDED8863A8E7B855CD471B55C91FAE611C5486' ; // tslint:disable-line
50+
51+ // Act & Assert:
52+ expect ( ( ) => { signerPublicAccount . verifySignature ( data , signature ) ; } ) . to . throw ( 'Signature length is incorrect' ) ;
53+ } ) ;
54+
55+ it ( 'Throw error if signature is not strictly hexadecimal' , ( ) => {
56+ // Arrange:
57+ const signerPublicAccount = PublicAccount . createFromPublicKey ( '22816F825B4CACEA334723D51297D8582332D8B875A5829908AAE85831ABB508' ,
58+ NetworkType . MIJIN_TEST ) ;
59+ const data = 'I am so so so awesome as always' ;
60+ const signature = 'B01DCA6484026C2ECDF3C822E64DEAAFC15EBCCE337EEE209C28513CB5351CDED8863A8E7B855CD471B55C91FAE611C548625C9A5916A555A24F72F35a1wwwww' ; // tslint:disable-line
61+
62+ // Act & Assert:
63+ expect ( ( ) => { signerPublicAccount . verifySignature ( data , signature ) ; } )
64+ . to . throw ( 'Signature must be hexadecimal only' ) ;
65+ } ) ;
66+
67+ it ( 'Return false if wrong public key provided' , ( ) => {
68+ // Arrange:
69+ const signerPublicAccount = PublicAccount . createFromPublicKey ( '12816F825B4CACEA334723D51297D8582332D8B875A5829908AAE85831ABB509' ,
70+ NetworkType . MIJIN_TEST ) ;
71+ const data = 'I am so so so awesome as always' ;
72+ const signature = 'B01DCA6484026C2ECDF3C822E64DEAAFC15EBCCE337EEE209C28513CB5351CDED8863A8E7B855CD471B55C91FAE611C548625C9A5916A555A24F72F3526FA508' ; // tslint:disable-line
73+
74+ // Act & Assert:
75+ expect ( signerPublicAccount . verifySignature ( data , signature ) ) . to . be . false ;
76+ } ) ;
77+
78+ it ( 'Return false if data is not corresponding to signature provided' , ( ) => {
79+ // Arrange:
80+ const signerPublicAccount = PublicAccount . createFromPublicKey ( '22816F825B4CACEA334723D51297D8582332D8B875A5829908AAE85831ABB508' ,
81+ NetworkType . MIJIN_TEST ) ;
82+ const data = 'I am awesome as always' ;
83+ const signature = 'B01DCA6484026C2ECDF3C822E64DEAAFC15EBCCE337EEE209C28513CB5351CDED8863A8E7B855CD471B55C91FAE611C548625C9A5916A555A24F72F3526FA508' ; // tslint:disable-line
84+
85+ // Act & Assert:
86+ expect ( signerPublicAccount . verifySignature ( data , signature ) ) . to . be . false ;
87+ } ) ;
88+
89+ it ( 'Return false if signature is not corresponding to data provided' , ( ) => {
90+ // Arrange:
91+ const signerPublicAccount = PublicAccount . createFromPublicKey ( '22816F825B4CACEA334723D51297D8582332D8B875A5829908AAE85831ABB508' ,
92+ NetworkType . MIJIN_TEST ) ;
93+ const data = 'I am so so so awesome as always' ;
94+ const signature = 'A01DCA6484026C2ECDF3C822E64DEAAFC15EBCCE337EEE209C28513CB5351CDED8863A8E7B855CD471B55C91FAE611C548625C9A5916A555A24F72F3526FA509' ; // tslint:disable-line
95+
96+ // Act & Assert:
97+ expect ( signerPublicAccount . verifySignature ( data , signature ) ) . to . be . false ;
98+ } ) ;
99+ } ) ;
0 commit comments