| 
									
										
										
										
											2015-02-28 20:52:10 +01:00
										 |  |  | package trie | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import "github.com/ethereum/go-ethereum/crypto" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-24 15:14:03 +01:00
										 |  |  | var keyPrefix = []byte("secure-key-") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-28 20:52:10 +01:00
										 |  |  | type SecureTrie struct { | 
					
						
							|  |  |  | 	*Trie | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewSecure(root []byte, backend Backend) *SecureTrie { | 
					
						
							|  |  |  | 	return &SecureTrie{New(root, backend)} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (self *SecureTrie) Update(key, value []byte) Node { | 
					
						
							| 
									
										
										
										
											2015-03-24 15:14:03 +01:00
										 |  |  | 	shaKey := crypto.Sha3(key) | 
					
						
							|  |  |  | 	self.Trie.cache.Put(append(keyPrefix, shaKey...), key) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return self.Trie.Update(shaKey, value) | 
					
						
							| 
									
										
										
										
											2015-02-28 20:52:10 +01:00
										 |  |  | } | 
					
						
							|  |  |  | func (self *SecureTrie) UpdateString(key, value string) Node { | 
					
						
							|  |  |  | 	return self.Update([]byte(key), []byte(value)) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (self *SecureTrie) Get(key []byte) []byte { | 
					
						
							|  |  |  | 	return self.Trie.Get(crypto.Sha3(key)) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | func (self *SecureTrie) GetString(key string) []byte { | 
					
						
							|  |  |  | 	return self.Get([]byte(key)) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (self *SecureTrie) Delete(key []byte) Node { | 
					
						
							|  |  |  | 	return self.Trie.Delete(crypto.Sha3(key)) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-03 12:15:58 +01:00
										 |  |  | func (self *SecureTrie) DeleteString(key string) Node { | 
					
						
							| 
									
										
										
										
											2015-02-28 20:52:10 +01:00
										 |  |  | 	return self.Delete([]byte(key)) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-03 12:25:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | func (self *SecureTrie) Copy() *SecureTrie { | 
					
						
							|  |  |  | 	return &SecureTrie{self.Trie.Copy()} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-24 15:14:03 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | func (self *SecureTrie) GetKey(shaKey []byte) []byte { | 
					
						
							|  |  |  | 	return self.Trie.cache.Get(append(keyPrefix, shaKey...)) | 
					
						
							|  |  |  | } |