Skip to content
Snippets Groups Projects
main.go 2.07 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	"flag"
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    	"code.fbi.h-da.de/m.stiemerling/proto-kms/kms"
    	"github.com/google/uuid"
    
    	// run a self-test if set to yes
    	var selfTesting bool
    
    	// my own Name
    	var udpQL1AddrString string
    	var ql1Name string
    
    	// a name for potential self-testing
    
    	var udpQL2AddrString string
    	var ql2Name string
    
    	// Setup flags that allows to initially provide a address to a second
    	// quantumlayer so generated keys can be fetched. This is mainly to simplify
    	// the initial setup process.
    
    
    	flag.BoolVar(&selfTesting, "selfTesting", false,
    		"Will perform self-testing with second quantum link if set to true")
    
    
    	flag.StringVar(&udpQL1AddrString, "address", "[::1]:50900",
    
    		"The UDP address for my quantumlayer so keys can be fetched")
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    
    
    	flag.StringVar(&ql1Name, "name", "ekms-ql1",
    		"The name of the quantumlayer")
    
    	flag.StringVar(&udpQL2AddrString, "address", "[::1]:50901",
    		"The UDP address to a second quantumlayer so keys can be fetched")
    
    	flag.StringVar(&ql2Name, "name", "ekms-ql2",
    		"The name of the quantumlayer")
    
    	// Parse the provided flags
    	flag.Parse()
    
    
    	log.Println("Welcome to the proto-kms called: ", ql1Name)
    
    	if selfTesting == true {
    		go emulatedKMS(ql2Name, udpQL2AddrString, udpQL1AddrString)
    		emulatedKMS(ql1Name, udpQL1AddrString, udpQL2AddrString)
    	} else {
    		emulatedKMS(ql1Name, udpQL1AddrString, "")
    	}
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    	return
    }
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    func emulatedKMS(myName string, myUDPAddr string, peerUDPAddr string) {
    	// Attach to eKMS
    	emuKMS := kms.NeweKMS()
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    	// Fire up Quantum LinK
    	myQL := emuKMS.AddQuantumElement(myName, uuid.New(), myUDPAddr)
    
    	udpQL2Addr, err := net.ResolveUDPAddr("udp", peerUDPAddr)
    
    	if err != nil {
    		log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
    		return
    	}
    
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    	myQL.QlElement.AddPeer(*udpQL2Addr)
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    		resultQLLocal, err := myQL.QlElement.GetKeyBatchLocal()
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    			log.Printf("Current key IDs are for %s local %d:", myName, resultQLLocal.BulkKeyId)
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    		resultQLRemote, err := myQL.QlElement.GetKeyBatchPeer()
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    			log.Printf("Current key IDs are for remote %d:", resultQLRemote.BulkKeyId)