Skip to content

Commit 38099de

Browse files
committed
Use dcrd's crypto/rand module
1 parent f8cafb3 commit 38099de

File tree

19 files changed

+86
-379
lines changed

19 files changed

+86
-379
lines changed

go.mod

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require (
1313
github.com/decred/dcrd/chaincfg/v3 v3.2.1
1414
github.com/decred/dcrd/connmgr/v3 v3.1.2
1515
github.com/decred/dcrd/crypto/blake256 v1.0.1
16+
github.com/decred/dcrd/crypto/rand v0.0.0-20240613225426-c320f9914994
1617
github.com/decred/dcrd/crypto/ripemd160 v1.0.2
1718
github.com/decred/dcrd/dcrec v1.0.1
1819
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0
@@ -35,9 +36,9 @@ require (
3536
github.com/jrick/logrotate v1.0.0
3637
github.com/jrick/wsrpc/v2 v2.3.5
3738
go.etcd.io/bbolt v1.3.8
38-
golang.org/x/crypto v0.23.0
39+
golang.org/x/crypto v0.24.0
3940
golang.org/x/sync v0.7.0
40-
golang.org/x/term v0.20.0
41+
golang.org/x/term v0.21.0
4142
google.golang.org/grpc v1.45.0
4243
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0
4344
google.golang.org/protobuf v1.27.1
@@ -53,8 +54,8 @@ require (
5354
github.com/golang/protobuf v1.5.2 // indirect
5455
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
5556
golang.org/x/net v0.25.0 // indirect
56-
golang.org/x/sys v0.20.0 // indirect
57-
golang.org/x/text v0.15.0 // indirect
57+
golang.org/x/sys v0.21.0 // indirect
58+
golang.org/x/text v0.16.0 // indirect
5859
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
5960
lukechampine.com/blake3 v1.3.0 // indirect
6061
)

go.sum

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ github.com/decred/dcrd/connmgr/v3 v3.1.2 h1:+xNopie2L3YYwwkz51k0h/pASATOBzHtl2O8
4141
github.com/decred/dcrd/connmgr/v3 v3.1.2/go.mod h1:tdbErFiNOuy/sHrX2mwaOk+r1HLs3EBz2EGxsocMPe4=
4242
github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
4343
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
44+
github.com/decred/dcrd/crypto/rand v0.0.0-20240613225426-c320f9914994 h1:+SVSe5nF5ZHOMrFU/CV2QY1FMeYp6k5bYXwk5dYA64Q=
45+
github.com/decred/dcrd/crypto/rand v0.0.0-20240613225426-c320f9914994/go.mod h1:coa7BbxSTiKH6esi257plGfMFYuGL4MTbQlLYnOdzpE=
4446
github.com/decred/dcrd/crypto/ripemd160 v1.0.2 h1:TvGTmUBHDU75OHro9ojPLK+Yv7gDl2hnUvRocRCjsys=
4547
github.com/decred/dcrd/crypto/ripemd160 v1.0.2/go.mod h1:uGfjDyePSpa75cSQLzNdVmWlbQMBuiJkvXw/MNKRY4M=
4648
github.com/decred/dcrd/database/v3 v3.0.2 h1:rgP7XNZemTs8ZC7bnTKO8JO79Woj5nq+yQYmB9ry7yM=
@@ -136,8 +138,8 @@ go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
136138
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
137139
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
138140
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
139-
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
140-
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
141+
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
142+
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
141143
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
142144
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
143145
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -165,13 +167,13 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
165167
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
166168
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
167169
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
168-
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
169-
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
170-
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
171-
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
170+
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
171+
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
172+
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
173+
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
172174
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
173-
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
174-
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
175+
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
176+
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
175177
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
176178
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
177179
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=

internal/rpc/jsonrpc/methods.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ package jsonrpc
88
import (
99
"bytes"
1010
"context"
11-
"crypto/rand"
1211
"encoding/base64"
1312
"encoding/binary"
1413
"encoding/hex"
@@ -39,6 +38,7 @@ import (
3938
blockchain "github.com/decred/dcrd/blockchain/standalone/v2"
4039
"github.com/decred/dcrd/chaincfg/chainhash"
4140
"github.com/decred/dcrd/chaincfg/v3"
41+
"github.com/decred/dcrd/crypto/rand"
4242
"github.com/decred/dcrd/dcrec"
4343
"github.com/decred/dcrd/dcrec/secp256k1/v4"
4444
"github.com/decred/dcrd/dcrjson/v4"
@@ -3633,11 +3633,7 @@ func (s *Server) sendOutputsFromTreasury(ctx context.Context, w *wallet.Wallet,
36333633
// OP_RETURN <8 Bytes ValueIn><24 byte random>. The encoded ValueIn is
36343634
// added at the end of this function.
36353635
var payload [32]byte
3636-
_, err = rand.Read(payload[8:])
3637-
if err != nil {
3638-
return "", rpcErrorf(dcrjson.ErrRPCInternal.Code,
3639-
"sendOutputsFromTreasury Read: %v", err)
3640-
}
3636+
rand.Read(payload[8:])
36413637
builder := txscript.NewScriptBuilder()
36423638
builder.AddOp(txscript.OP_RETURN)
36433639
builder.AddData(payload[:])
@@ -4308,10 +4304,10 @@ func (s *Server) spendOutputs(ctx context.Context, icmd any) (any, error) {
43084304
txOut.Version = scriptVersion
43094305
outputs = append(outputs, txOut)
43104306
}
4311-
wallet.Shuffle(len(inputs), func(i, j int) {
4307+
rand.Shuffle(len(inputs), func(i, j int) {
43124308
inputs[i], inputs[j] = inputs[j], inputs[i]
43134309
})
4314-
wallet.Shuffle(len(outputs), func(i, j int) {
4310+
rand.Shuffle(len(outputs), func(i, j int) {
43154311
outputs[i], outputs[j] = outputs[j], outputs[i]
43164312
})
43174313

internal/rpc/rpcserver/server.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package rpcserver
1919
import (
2020
"bytes"
2121
"context"
22-
"crypto/rand"
2322
"encoding/hex"
2423
"fmt"
2524
"net"
@@ -50,6 +49,7 @@ import (
5049
"github.com/decred/dcrd/blockchain/stake/v5"
5150
"github.com/decred/dcrd/chaincfg/chainhash"
5251
"github.com/decred/dcrd/chaincfg/v3"
52+
"github.com/decred/dcrd/crypto/rand"
5353
"github.com/decred/dcrd/dcrec/secp256k1/v4"
5454
"github.com/decred/dcrd/dcrutil/v4"
5555
"github.com/decred/dcrd/gcs/v4"
@@ -3290,10 +3290,7 @@ func (s *seedServer) GenerateRandomSeed(ctx context.Context, req *pb.GenerateRan
32903290
}
32913291

32923292
seed := make([]byte, seedSize)
3293-
_, err := rand.Read(seed)
3294-
if err != nil {
3295-
return nil, status.Errorf(codes.Unavailable, "failed to read cryptographically-random data for seed: %v", err)
3296-
}
3293+
rand.Read(seed)
32973294

32983295
res := &pb.GenerateRandomSeedResponse{
32993296
SeedBytes: seed,

internal/uniformprng/prng.go

Lines changed: 0 additions & 122 deletions
This file was deleted.

rpcserver.go

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ package main
88
import (
99
"bytes"
1010
"context"
11-
"crypto/rand"
1211
"crypto/tls"
1312
"crypto/x509"
1413
"crypto/x509/pkix"
@@ -28,6 +27,7 @@ import (
2827
"decred.org/dcrwallet/v4/internal/loggers"
2928
"decred.org/dcrwallet/v4/internal/rpc/jsonrpc"
3029
"decred.org/dcrwallet/v4/internal/rpc/rpcserver"
30+
"github.com/decred/dcrd/crypto/rand"
3131

3232
"google.golang.org/grpc"
3333
"google.golang.org/grpc/codes"
@@ -114,13 +114,10 @@ func generateRPCKeyPair(writeKey bool) (tls.Certificate, error) {
114114
return keyPair, nil
115115
}
116116

117-
func randomX509SerialNumber() (*big.Int, error) {
117+
func randomX509SerialNumber() *big.Int {
118118
serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
119-
serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
120-
if err != nil {
121-
return nil, fmt.Errorf("failed to generate serial number: %s", err)
122-
}
123-
return serialNumber, nil
119+
serialNumber := rand.BigInt(serialNumberLimit)
120+
return serialNumber
124121
}
125122

126123
// End of ASN.1 time
@@ -141,10 +138,7 @@ func generateAuthority(pub, priv any) (*ClientCA, error) {
141138
if validUntil.Before(now) {
142139
return nil, fmt.Errorf("valid until date %v already elapsed", validUntil)
143140
}
144-
serialNumber, err := randomX509SerialNumber()
145-
if err != nil {
146-
return nil, err
147-
}
141+
serialNumber := randomX509SerialNumber()
148142
template := &x509.Certificate{
149143
SerialNumber: serialNumber,
150144
Subject: pkix.Name{
@@ -158,7 +152,7 @@ func generateAuthority(pub, priv any) (*ClientCA, error) {
158152
BasicConstraintsValid: true,
159153
IsCA: true,
160154
}
161-
cert, err := x509.CreateCertificate(rand.Reader, template, template, pub, priv)
155+
cert, err := x509.CreateCertificate(rand.Reader(), template, template, pub, priv)
162156
if err != nil {
163157
return nil, err
164158
}
@@ -196,10 +190,7 @@ func marshalPrivateKey(key any) ([]byte, error) {
196190
}
197191

198192
func createSignedClientCert(pub, caPriv any, ca *x509.Certificate) ([]byte, error) {
199-
serialNumber, err := randomX509SerialNumber()
200-
if err != nil {
201-
return nil, err
202-
}
193+
serialNumber := randomX509SerialNumber()
203194
template := &x509.Certificate{
204195
SerialNumber: serialNumber,
205196
NotBefore: time.Now().Add(-time.Hour * 24),
@@ -210,7 +201,7 @@ func createSignedClientCert(pub, caPriv any, ca *x509.Certificate) ([]byte, erro
210201
OrganizationalUnit: []string{"dcrwallet client certificate"},
211202
},
212203
}
213-
cert, err := x509.CreateCertificate(rand.Reader, template, ca, pub, caPriv)
204+
cert, err := x509.CreateCertificate(rand.Reader(), template, ca, pub, caPriv)
214205
if err != nil {
215206
return nil, err
216207
}
@@ -223,7 +214,7 @@ func createSignedClientCert(pub, caPriv any, ca *x509.Certificate) ([]byte, erro
223214
}
224215

225216
func generateClientKeyPair(caPriv any, ca *x509.Certificate) (cert, key []byte, err error) {
226-
pub, priv, err := cfg.TLSCurve.GenerateKeyPair(rand.Reader)
217+
pub, priv, err := cfg.TLSCurve.GenerateKeyPair(rand.Reader())
227218
if err != nil {
228219
return
229220
}
@@ -282,7 +273,7 @@ func startRPCServers(walletLoader *loader.Loader) (*grpc.Server, *jsonrpc.Server
282273
tlsConfig.ClientAuth = tls.RequireAndVerifyClientCert
283274
}
284275
if cfg.IssueClientCert {
285-
pub, priv, err := cfg.TLSCurve.GenerateKeyPair(rand.Reader)
276+
pub, priv, err := cfg.TLSCurve.GenerateKeyPair(rand.Reader())
286277
if err != nil {
287278
return nil, nil, err
288279
}

0 commit comments

Comments
 (0)