You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
| import { randomBytes } from 'crypto';
 | |
| 
 | |
| const g = global as any;
 | |
| 
 | |
| // Because curve wrapper will populate this
 | |
| g.Internal = {};
 | |
| 
 | |
| // Because curve wrapper uses 'Module' to get at curve-provided functionality
 | |
| // tslint:disable-next-line
 | |
| g.Module = require('../../js/curve/curve25519_compiled');
 | |
| // tslint:disable-next-line
 | |
| require('../../js/curve/curve25519_wrapper');
 | |
| 
 | |
| export type BinaryType = Uint8Array | Buffer;
 | |
| 
 | |
| interface CurveType {
 | |
|   keyPair: (
 | |
|     privateKey: BinaryType
 | |
|   ) => {
 | |
|     pubKey: BinaryType;
 | |
|     privKey: BinaryType;
 | |
|   };
 | |
|   sign: (privateKey: BinaryType, message: BinaryType) => BinaryType;
 | |
|   verify: (publicKey: BinaryType, message: BinaryType, signature: BinaryType) => boolean;
 | |
| }
 | |
| 
 | |
| const { keyPair: internalKeyPair, sign: internalSign, verify: internalVerify } = g.Internal
 | |
|   .curve25519 as CurveType;
 | |
| 
 | |
| export function keyPair() {
 | |
|   const privateKey = randomBytes(32);
 | |
|   const { pubKey, privKey } = internalKeyPair(privateKey);
 | |
| 
 | |
|   return {
 | |
|     publicKey: pubKey,
 | |
|     privateKey: privKey,
 | |
|   };
 | |
| }
 | |
| 
 | |
| export function sign(privateKey: BinaryType, message: BinaryType) {
 | |
|   return internalSign(privateKey, message);
 | |
| }
 | |
| 
 | |
| export function verify(publicKey: BinaryType, message: BinaryType, signature: BinaryType) {
 | |
|   const failed = internalVerify(publicKey, message, signature);
 | |
| 
 | |
|   return !failed;
 | |
| }
 |