MCPcopy Create free account
hub / github.com/XTLS/Go / generateClientKeyExchange

Method generateClientKeyExchange

key_agreement.go:80–103  ·  view source on GitHub ↗
(config *Config, clientHello *clientHelloMsg, cert *x509.Certificate)

Source from the content-addressed store, hash-verified

78}
79
80func (ka rsaKeyAgreement) generateClientKeyExchange(config *Config, clientHello *clientHelloMsg, cert *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) {
81 preMasterSecret := make([]byte, 48)
82 preMasterSecret[0] = byte(clientHello.vers >> 8)
83 preMasterSecret[1] = byte(clientHello.vers)
84 _, err := io.ReadFull(config.rand(), preMasterSecret[2:])
85 if err != nil {
86 return nil, nil, err
87 }
88
89 rsaKey, ok := cert.PublicKey.(*rsa.PublicKey)
90 if !ok {
91 return nil, nil, errors.New("tls: server certificate contains incorrect key type for selected ciphersuite")
92 }
93 encrypted, err := rsa.EncryptPKCS1v15(config.rand(), rsaKey, preMasterSecret)
94 if err != nil {
95 return nil, nil, err
96 }
97 ckx := new(clientKeyExchangeMsg)
98 ckx.ciphertext = make([]byte, len(encrypted)+2)
99 ckx.ciphertext[0] = byte(len(encrypted) >> 8)
100 ckx.ciphertext[1] = byte(len(encrypted))
101 copy(ckx.ciphertext[2:], encrypted)
102 return preMasterSecret, ckx, nil
103}
104
105// sha1Hash calculates a SHA1 hash over the given byte slices.
106func sha1Hash(slices [][]byte) []byte {

Callers

nothing calls this directly

Calls 1

randMethod · 0.80

Tested by

no test coverage detected