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.
		
		
		
		
		
			
		
			
	
	
		
			60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
| 
											7 years ago
										 | 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; | ||
|  | } |