| 
									
										
										
										
											2014-10-31 12:37:43 +01:00
										 |  |  | package crypto | 
					
						
							| 
									
										
										
										
											2014-06-29 15:57:12 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2014-10-08 12:00:50 +02:00
										 |  |  | 	"crypto/sha256" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"code.google.com/p/go.crypto/ripemd160" | 
					
						
							| 
									
										
										
										
											2014-10-23 15:01:27 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/ethutil" | 
					
						
							| 
									
										
										
										
											2014-10-08 12:00:50 +02:00
										 |  |  | 	"github.com/obscuren/secp256k1-go" | 
					
						
							| 
									
										
										
										
											2014-10-23 15:01:27 +02:00
										 |  |  | 	"github.com/obscuren/sha3" | 
					
						
							| 
									
										
										
										
											2014-06-29 15:57:12 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-08 12:00:50 +02:00
										 |  |  | // TODO refactor, remove (bin) | 
					
						
							| 
									
										
										
										
											2014-10-08 12:06:39 +02:00
										 |  |  | func Sha3(data []byte) []byte { | 
					
						
							| 
									
										
										
										
											2014-06-29 15:57:12 +01:00
										 |  |  | 	d := sha3.NewKeccak256() | 
					
						
							|  |  |  | 	d.Write(data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return d.Sum(nil) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-06-29 16:08:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Creates an ethereum address given the bytes and the nonce | 
					
						
							| 
									
										
										
										
											2014-07-03 10:03:58 +02:00
										 |  |  | func CreateAddress(b []byte, nonce uint64) []byte { | 
					
						
							| 
									
										
										
										
											2014-10-08 12:06:39 +02:00
										 |  |  | 	return Sha3(ethutil.NewValue([]interface{}{b, nonce}).Encode())[12:] | 
					
						
							| 
									
										
										
										
											2014-06-29 16:08:33 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-10-08 12:00:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | func Sha256(data []byte) []byte { | 
					
						
							|  |  |  | 	hash := sha256.Sum256(data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return hash[:] | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func Ripemd160(data []byte) []byte { | 
					
						
							|  |  |  | 	ripemd := ripemd160.New() | 
					
						
							|  |  |  | 	ripemd.Write(data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return ripemd.Sum(nil) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func Ecrecover(data []byte) []byte { | 
					
						
							|  |  |  | 	var in = struct { | 
					
						
							|  |  |  | 		hash []byte | 
					
						
							|  |  |  | 		sig  []byte | 
					
						
							|  |  |  | 	}{data[:32], data[32:]} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	r, _ := secp256k1.RecoverPubkey(in.hash, in.sig) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return r | 
					
						
							|  |  |  | } |