This commit fixed the notoriously annoying "Malformed Public Key" problem. The issue was that sometimes the byte representation of the points (x,y in big.Int) generated would be one less byte than expected. This is simply because (* big.Int) Write uses the least amount of bytes needed for the int. I instead changed the marshalling/unmarshalling to do exactly what stdlib crypto/tls does: use `ellipctic.Marshal` which marshals according to the ANSI X9.62 standard. http://golang.org/pkg/crypto/elliptic/#Marshal http://golang.org/src/pkg/crypto/tls/key_agreement.go#L214 ```Go // crypto/tls ka.privateKey, x, y, err = elliptic.GenerateKey(ka.curve, config.rand()) ecdhePublic := elliptic.Marshal(ka.curve, x, y) // ipfs/crypto priv, x, y, err := elliptic.GenerateKey(curve, rand.Reader) pubKey := elliptic.Marshal(curve, x, y) ``` ((Warning: we're using `rand.Reader` directly, which we shouldn't do, as it can be seeded. We should use a configured source, as crypto/tls. Flagged in #143)) This makes me think we should re-use a lot of their datastructures and functions directly (e.g. ecdheKeyAgreement) Fixed: #135 cc @bren2010 @whyrusleeping
| 名称 |
最后提交
|
最后更新 |
|---|---|---|
| Godeps | 正在载入提交数据... | |
| blocks | 正在载入提交数据... | |
| blockservice | 正在载入提交数据... | |
| blockstore | 正在载入提交数据... | |
| cmd/ipfs | 正在载入提交数据... | |
| config | 正在载入提交数据... | |
| core | 正在载入提交数据... | |
| crypto | 正在载入提交数据... | |
| daemon | 正在载入提交数据... | |
| exchange | 正在载入提交数据... | |
| fuse | 正在载入提交数据... | |
| importer | 正在载入提交数据... | |
| merkledag | 正在载入提交数据... | |
| msgproto | 正在载入提交数据... | |
| namesys | 正在载入提交数据... | |
| net | 正在载入提交数据... | |
| path | 正在载入提交数据... | |
| peer | 正在载入提交数据... | |
| routing | 正在载入提交数据... | |
| server/http | 正在载入提交数据... | |
| util | 正在载入提交数据... | |
| .gitignore | 正在载入提交数据... | |
| .travis.yml | 正在载入提交数据... | |
| Dockerfile | 正在载入提交数据... | |
| LICENSE | 正在载入提交数据... | |
| Makefile | 正在载入提交数据... | |
| README.md | 正在载入提交数据... | |
| dev.md | 正在载入提交数据... | |
| doc.go | 正在载入提交数据... |