Cute Bow Tie Hearts Blinking Pink Pointer

블록체인

[Typescript] 암호화폐 지갑 대~충 구현해보기(찍먹)

청포도 에이드 2022. 6. 16. 16:15
728x90

 

오늘 할 것은 암호화폐에 필요한 비밀키(개인키) 생성, 공개키 생성, 디지털 서명, 검증, 계정생성이다.

 

타원곡선이 블록체인에 어떻게 이용되는가?  ↓

타원곡선과 블록체인 (brunch.co.kr)

 

타원곡선과 블록체인

"이거 진짜 너가 보낸 트랜잭션 맞아?" | 시작하기 전에 이 글은 블록체인에 타원곡선이 어떤 식으로 이용되는지에 초점을 둔 글 입니다. 주제의 특성상 너무 기술적으로 들어가는 부분들이 있는

brunch.co.kr

 

src/core/wallet/wallet.test.ts
import { randomBytes } from 'crypto'
import { SHA256 } from 'crypto-js'
import elliptic from 'elliptic'

const ec = new elliptic.ec('secp256k1')
//  저 알고리즘 결과를 리턴해주는 라이브러리가 있지 않을까?
// => elliptic 설치하기
describe('지갑 이해하기', () => {
    let privKey: string, pubkey: string
    let signature: elliptic.ec.Signature
    it('비밀키 (privKey)', () => {
        privKey = randomBytes(32).toString('hex') //16진수, 32바이트짜리 랜덤으로 생성해라.
        console.log(privKey.length) //32바이트를 16진수로 변호나 --> 64글자
    })

    it('공개키 생성하기', () => {
        const keyPair = ec.keyFromPrivate(privKey)
        pubkey = keyPair.getPublic().encode('hex', true) // 비밀키를 공개키로 변환
        console.log(pubkey)
    })

    it('디지털 서명', () => {
        // 서명을 만들때 필요한 값
        // 개인키,  해쉬값 (transaction hash)
        const keyPair = ec.keyFromPrivate(privKey)
        const hash = SHA256('ingoo').toString()
        signature = keyPair.sign(hash, 'hex')
    })

    it('검증(verify)', () => {
        // 서명, hash, 공개키
        const hash = 'ingoo'
        const pubkey2 = '020c486d27513a9be673dcbd6af8092bc4d8cc63b121b32ce8556c943716e8ef3d'
        const verify = ec.verify(hash, signature, ec.keyFromPublic(pubkey2, 'hex'))
        console.log(verify) //false
        //이유: 내 암호가 아님
    })

    it('계정 만들기', () => {
        const buffer = Buffer.from(pubkey)
        const address = buffer.slice(24).toString() // 앞자리 24글자는 쳐낸다.
        console.log(address.length) // 지갑 주소는 42글자
    })
})

//npx jest ./scr/core/wallet

elliptic는 일반 자바 스크립트 구현에서 빠른 타원 곡선 암호화를 해주는 라이브러리이다.

 

참고:

https://www.npmjs.com/package/elliptic

 

elliptic

EC cryptography. Latest version: 6.5.4, last published: a year ago. Start using elliptic in your project by running `npm i elliptic`. There are 2084 other projects in the npm registry using elliptic.

www.npmjs.com

 

728x90