def __init__(self, network, bargain_uri = ''): ''' Constructor ''' self.bargain_uri = bargain_uri magicbytes = MAGIC_BYTES_TESTNET if network == TESTNET else MAGIC_BYTES_MAINNET self._privkey1 = sha256('This is a private key') self._pubkey1 = privtopub(self._privkey1) self.addr1 = pubtoaddr(self._pubkey1, magicbytes) # mryyjA6YpPCJ24MsSN7YnCK6M3NZoUAwxb self._script1 = address_to_script(self.addr1) self._privkeysign = sha256('This is a private key used to sign messages sent by the buyer') self._pubkeysign = privtopub(self._privkeysign)
def getPrivKey(n): seed = "MultiSig를 시험하기 위해 만든 seed" key = [] for i in range(n): privKey = btc.sha256(seed) key.append(privKey) seed = privKey return key
def _sign_ecdsa_sha256(self, msg, privkey): ''' Signs a msg with SHA256 + ECDSA Parameters: msg = message to be signed privkey = private key ''' if privkey is None: raise SignatureError() try: return ecdsa_sign(sha256(msg), privkey) except: raise SignatureError()
def _check_sign_ecdsa_sha256(self, msg, sig, pubkey): ''' Checks a SHA256 + ECDSA signature Returns True is signature is valid, False otherwise Parameters: msg = signed message sig = signature pubkey = ecdsa public key ''' if (not sig) or (not pubkey): return False try: return ecdsa_verify(sha256(msg), sig, pubkey) except: return False
def shared_secret_sender(scan_pubkey, ephem_privkey): shared_point = main.multiply(scan_pubkey, ephem_privkey) shared_secret = main.sha256( main.encode_pubkey(shared_point, 'bin_compressed')) return shared_secret
def shared_secret_sender(scan_pubkey, ephem_privkey): shared_point = main.multiply(scan_pubkey, ephem_privkey) shared_secret = main.sha256(main.encode_pubkey(shared_point, 'bin_compressed')) return shared_secret
# 파이썬 실습 파일: BrainWallet.py # pybitcointools (https://github.com/vbuterin/pybitcointools) # pybitcointools를 설치하지 않고 배포용 실습 코드의 bitcoin 폴더가 있는 곳에서 실행한다. import bitcoin.main as btc # 특정 문자열로 256-bit 개인키를 생성한다 (long brain wallet passphrase). passphrase = 'Brain Wallet 시험용 개인키입니다. 잊어버리지 마세요.' privKey = btc.sha256(passphrase) dPrivKey = btc.decode_privkey(privKey, 'hex') # 16진수 문자열을 10진수 숫자로 변환한다 if dPrivKey < btc.N: # secp256k1 의 N 보다 작으면 OK # 개인키로 공개키를 생성한다. pubKey = btc.privkey_to_pubkey(privKey) # 공개키로 지갑 주소를 생성한다. (mainnet 용) address = btc.pubkey_to_address(pubKey, 0) # 결과 확인 print("\n\nPassphrase :", passphrase) print("\n개인키 :", privKey) print("개인키 --> 공개키 :", pubKey) print("\n공개키 --> 지갑주소 :", address) else: print("요청하신 Passphrase로 개인키를 만들었으나, 유효하지 않습니다.") print("다른 Passphrase로 다시 시도해 주세요.")
# 파이썬 실습 파일: 3-8.DeterministicWallet.py # pybitcointools (https://github.com/vbuterin/pybitcointools) # pybitcointools를 설치하지 않고 배포용 실습 코드의 bitcoin 폴더가 있는 곳에서 실행한다. import bitcoin.main as btc # 초기 Seed 값을 정의한다. seed = '초기 seed 값입니다.' # n 개의 개인키를 만든다 n = 5 error = 0 for i in range(1, (n + 1)): seed += str(i) privKey = btc.sha256(seed) dPrivKey = btc.decode_privkey(privKey, 'hex') # 16진수 문자열을 10진수 숫자로 변환한다 if dPrivKey < btc.N: # secp256k1 의 N 보다 작으면 OK print("Key (%d) : %s" % (i, privKey)) else: error += 1 if error > 0: print("요청하신 seed로 개인키 %d개를 모두 만들지 못했습니다." % n)
def __init__(self, password, iv = None): self.key = bytearray(sha256(password)) self.iv = list(bytearray(os.urandom(32))) if iv is None else iv
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' Version: 0.0.1 Python library for the bargaining protocol ''' import json from bitcoin import address_to_script from bitcoin.main import sha256, privtopub, pubtoaddr from pybargain_protocol.constants import MAGIC_BYTES_TESTNET ''' TEST VALUES ''' TEST_PRIV1 = sha256('This is a private key') TEST_PUB1 = privtopub(TEST_PRIV1) TEST_ADDR1 = pubtoaddr(TEST_PUB1, MAGIC_BYTES_TESTNET) # mryyjA6YpPCJ24MsSN7YnCK6M3NZoUAwxb TEST_PRIV2 = sha256('This is another private key') TEST_PUB2 = privtopub(TEST_PRIV2) TEST_ADDR2 = pubtoaddr(TEST_PUB2, MAGIC_BYTES_TESTNET) # mftfwza9ZBwQRF2VW3YLuBhe8AkR2c2vrL VALID_TIME1 = 1400100000L VALID_TIME2 = 1400200000L VALID_TIME3 = 1400300000L VALID_TIME4 = 1400400000L VALID_TIME5 = 1400500000L VALID_TIME6 = 1400600000L VALID_EXPIRES1 = 1401100000L VALID_EXPIRES2 = 1401200000L