storj.io/uplink@v1.13.0/tls.go (about)

     1  // Copyright (C) 2021 Storj Labs, Inc.
     2  // See LICENSE for copying information.
     3  
     4  package uplink
     5  
     6  import (
     7  	"context"
     8  	"sync"
     9  
    10  	"storj.io/common/identity"
    11  	"storj.io/common/peertls/tlsopts"
    12  )
    13  
    14  var processTLSOptions struct {
    15  	mu         sync.Mutex
    16  	tlsOptions *tlsopts.Options
    17  }
    18  
    19  func getProcessTLSOptions(ctx context.Context) (*tlsopts.Options, error) {
    20  	processTLSOptions.mu.Lock()
    21  	defer processTLSOptions.mu.Unlock()
    22  
    23  	if processTLSOptions.tlsOptions != nil {
    24  		return processTLSOptions.tlsOptions, nil
    25  	}
    26  
    27  	ident, err := identity.NewFullIdentity(ctx, identity.NewCAOptions{
    28  		Difficulty:  0,
    29  		Concurrency: 1,
    30  	})
    31  	if err != nil {
    32  		return nil, packageError.Wrap(err)
    33  	}
    34  
    35  	tlsConfig := tlsopts.Config{
    36  		UsePeerCAWhitelist: false,
    37  		PeerIDVersions:     "0",
    38  	}
    39  
    40  	tlsOptions, err := tlsopts.NewOptions(ident, tlsConfig, nil)
    41  	if err != nil {
    42  		return nil, packageError.Wrap(err)
    43  	}
    44  
    45  	processTLSOptions.tlsOptions = tlsOptions
    46  	return tlsOptions, nil
    47  }