UNPKG

ssv-keys

Version:

Tool for splitting a validator key into a predefined threshold of shares via Shamir-Secret-Sharing (SSS), and encrypt them with a set of operator keys.

50 lines (39 loc) 3.47 kB
import { KeySharesItem } from '../../../main'; import mockKeySharesItemWithOperators from './mock-key-shares/item-with-operators.json'; let keySharesItem: KeySharesItem; describe('KeyShares.buildSharesFromBytes', () => { beforeAll(async () => { keySharesItem = new KeySharesItem(); }); it('should correctly build shares from valid bytes and operator count', () => { const bytes = mockKeySharesItemWithOperators.payload.sharesData; const operatorCount = mockKeySharesItemWithOperators.payload.operatorIds.length; const result = keySharesItem.buildSharesFromBytes(bytes, operatorCount); const expectedSharesPublicKeys = [ '0x94cea87c658901ea00149e2b04ff14a57fe19e9487e6f91442cbf2142543c9aae0959a0c4a6dd67941bec2310b89f93f', '0xa00b29a17b86d76c5e1eda34df10c3fe65283413fd105333f76ee4029a457158a9fb33d1ef93abf811e70dcdccef4f1f', '0x84e2b44fc937863d8be4cef0f5584f4af14ec950f2d1dbb7301b3f316565985a9ea1676c1277e9280467adb6d9a69f05', '0x80d3a4a9c4b8b6b5f9753b51abac9f23397f5d50217785cb5245106f99f4e821d1f762c87f13b45ea7ebe4adeffd7d28' ]; const expectedEncyptedSharesPublicKeys = [ 'H4TitE/JN4Y9i+TO8PVYT0rxTslQ8tHbtzAbPzFlZZhanqFnbBJ36SgEZ6222aafBYDTpKnEuLa1+XU7UausnyM5f11QIXeFy1JFEG+Z9Ogh0fdiyH8TtF6n6+St7/19KDRbPJ+uWL5fZiup/mEPx64Bl+dIwpZUK5S8ll3yW8jiySTMuGQuH3g5nLTWp/m2RB1EjzI2ylGi8yCdNXwxmItd5vN4QqU7AUQaceqGf86gyhMz3/kvv/ELxMx459Fu/SeS/bywHwSZAz2CLtNnZ1W35TkyEHRvSVIlKZwjrGUUiURfniMQsecbpIht/6P6z6xlkAwFGaCnGInV/WdyZ7LpfGLCpEcKO46ksx+9+2YXxS09mcYFBw==', 'Ms93w6AAA8wtZrvh9WcairDU5+tst+0hv7dwrsX3PlNrRSRQxXvvu+ofiaQnKi98m6nF6h3rBxxDW/J3zoWvsXN3ZSb976a71mtCXMS1+wRIRgt5xe3VIyny9+24q+AVy+cZljQmSVFVUWwS25jxbx2f4p170j3UQbPmG35Keg3q+Q8qGq3S1WMMq85aHKKA5gUoZUSvAbBoN5J7omLxybc0fQzApEsNCE0zhh11tnVSncWKNP364ja5x6cPA5OYwnj7j1stHP0F66fRUHwKrslTzBPJOH6DF/NdxbLk7QuWmXeK0Py1BFsM2pmqjQ925bhuaEzb6JB4V3Gnxaox+AAGjAyqa3Pzvr/4zADL98wHLFjM4BCwWg==', 'l9zMs9P9oM6STHy0kkL5yrQtRxXLksa4fFQ8pVul88TrW6UqMMWRDdyf7ZXGEONJk67Qwn7JOPRG7y0wgJJlEPFVmv8s8+BWF8b274myC/nPe8UFJQPxFAM4O3O5Aw07XjFpFw3pYl+Rw1ge3WWnAJR11NGQ7Cbnhrobo0DT9gV+bAaNEuJET+7kEgq4YbeCUeFSPoSBwDOF4JONAStJLp3kotS+MdXIqdBUolOg6FdOzt4rTc6hrTbRxBWIYNfg3WRCGUq8VUnJAYofhHTcrc7Am9yU8XJSn/IdSlADIbEL4tcW3BC22IQMCqYR96GhuurjR0Wn3jgyIU8ao6eoWLn2GDAzcpOA9aZL/XI3uwsW/gVhSmpAbg==', '/wZrjzX+j0d+RXE0U7DXV3alw4I1A/UKfYWNlRhJUxk8ycpsjUD7/RnFFLYYdJhmqypmleSpem63R8DJu3BKYu5bOpk4sqX0hc6qhZ9ZSSgbrdk7STWgFKRUb3PTrikZHBPKkwJ2/jZKEdUd5HglmW7mUQ9SAVAUEROuxnUhMOCTTEMCJPFxPG8rCjHZTijq6u9s0VOk9Cv25gwQ/PQkMj5BbLYKY9MQ3UxnTRS/jhtmNKt9s+I5J9dTHIG4MV1LDEoIssE4bySajvPbPSf4GYraIgeUISYU5YEwAwLY9azDRJj48kk1rZKG/PgQukq4J42dVD/HQvCA71lvMZRR7PJpIj2gCWhTLUamynOEjtGyPoj8VDeo5g==' ]; expect(result.sharesPublicKeys).toEqual(expectedSharesPublicKeys); expect(result.encryptedKeys).toEqual(expectedEncyptedSharesPublicKeys); expect(result.sharesPublicKeys).toHaveLength(operatorCount); expect(result.encryptedKeys).toHaveLength(operatorCount); }); it('should handle invalid byte string format', () => { const invalidBytes = 'not a valid hex string'; const operatorCount = 4; expect(() => keySharesItem.buildSharesFromBytes(invalidBytes, operatorCount)).toThrow(); }); it('should handle invalid operator count', () => { const bytes = mockKeySharesItemWithOperators.payload.sharesData; const invalidOperatorCount = -1; expect(() => keySharesItem.buildSharesFromBytes(bytes, invalidOperatorCount)).toThrow(); }); });