MCPcopy
hub / github.com/awnumar/memguard / SocketKey

Function SocketKey

examples/socketkey/socketkey.go:36–123  ·  view source on GitHub ↗

NOTE: Some lines are commented out for the sake of tests. * SocketKey is a streaming multi-threaded client->server transfer of secure data over a socket. */

(size int)

Source from the content-addressed store, hash-verified

34SocketKey is a streaming multi-threaded client->server transfer of secure data over a socket.
35*/
36func SocketKey(size int) {
37 // Create a server to listen on.
38 listener, err := net.Listen("tcp", "127.0.0.1:4128")
39 if err != nil {
40 memguard.SafePanic(err)
41 }
42 defer listener.Close()
43
44 // Catch signals and close the listener before terminating safely.
45 memguard.CatchSignal(func(s os.Signal) {
46 fmt.Println("Received signal:", s.String())
47 listener.Close()
48 }, os.Interrupt, os.Kill)
49
50 // Purge the session before returning.
51 defer memguard.Purge()
52
53 // Create a client to connect to our server.
54 go func() {
55 // Connect to our server
56 addr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:4128")
57 if err != nil {
58 memguard.SafePanic(err)
59 }
60 conn, err := net.DialTCP("tcp", nil, addr)
61 if err != nil {
62 memguard.SafePanic(err)
63 }
64 defer conn.Close()
65
66 // Create a buffer filled with random bytes
67 buf := memguard.NewBufferRandom(size)
68 defer buf.Destroy()
69
70 // Save a copy of the key for comparison later.
71 data = make([]byte, buf.Size())
72 copy(data, buf.Bytes())
73
74 // fmt.Printf("Sending key: %#v\n", buf.Bytes())
75
76 // Send the data to the server
77 var total, written int
78 for total = 0; total < size; total += written {
79 written, err = conn.Write(buf.Bytes()[total:])
80 if err != nil {
81 memguard.SafePanic(err)
82 }
83 }
84 }()
85
86 // Accept connections from clients
87 conn, err := listener.Accept()
88 if err != nil {
89 memguard.SafePanic(err)
90 }
91
92 // Read the data directly into a guarded memory region
93 buf, err := memguard.NewBufferFromReader(conn, size)

Callers 2

TestSocketKeyFunction · 0.85
BenchmarkSocketKey32Function · 0.85

Calls 12

SafePanicFunction · 0.92
CatchSignalFunction · 0.92
PurgeFunction · 0.92
NewBufferRandomFunction · 0.92
NewBufferFromReaderFunction · 0.92
StringMethod · 0.80
BytesMethod · 0.80
WriteMethod · 0.80
SealMethod · 0.80
OpenMethod · 0.80
DestroyMethod · 0.45
SizeMethod · 0.45

Tested by 2

TestSocketKeyFunction · 0.68
BenchmarkSocketKey32Function · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…