本文整理汇总了Golang中github.com/jlmucb/cloudproxy/go/util.MessageStream.WriteMessage方法的典型用法代码示例。如果您正苦于以下问题:Golang MessageStream.WriteMessage方法的具体用法?Golang MessageStream.WriteMessage怎么用?Golang MessageStream.WriteMessage使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/jlmucb/cloudproxy/go/util.MessageStream
的用法示例。
在下文中一共展示了MessageStream.WriteMessage方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: sendError
func sendError(err error, ms *util.MessageStream) {
var errStr = ""
if err != nil {
errStr = err.Error()
}
resp := &domain_service.DomainServiceResponse{ErrorMessage: &errStr}
if _, err := ms.WriteMessage(resp); err != nil {
log.Printf("domain_server: Error sending resp on the channel: %s\n ", err)
}
}
示例2: sendCredentials
func (conn *Conn) sendCredentials(ms util.MessageStream) {
if conn.Authenticate && conn.delegation != nil {
ms.WriteString("delegation")
ms.WriteMessage(conn.delegation)
} else if conn.Authenticate {
ms.WriteString("key")
} else {
ms.WriteString("anonymous")
}
}
示例3: SetCounter
// SetCounter sets the remote counter for this program.
func SetCounter(ms *util.MessageStream, counter uint64) error {
rm := &RollbackMessage{
Type: RollbackMessageType_SET_COUNTER.Enum(),
Data: EncodeCounter(counter),
}
if _, err := ms.WriteMessage(rm); err != nil {
return err
}
// TODO(tmroeder): we currently ignore the value of the counter returned
// by the server.
return checkResponse(ms)
}
示例4: sendResult
// sendResult sends an OperationResult with the given value on the given stream.
func sendResult(ms util.MessageStream, result bool) error {
res := &OperationResult{Result: proto.Bool(result)}
ar := &Message{
Type: MessageType_OP_RES.Enum(),
}
var err error
if ar.Data, err = proto.Marshal(res); err != nil {
return err
}
if _, err := ms.WriteMessage(ar); err != nil {
return err
}
return nil
}
示例5: SetHash
// SetHash sets the value of a hash for a given item for this program.
func SetHash(ms *util.MessageStream, item string, hash []byte) error {
rh := &RollbackHash{
Item: proto.String(item),
Hash: hash,
}
rhb, err := proto.Marshal(rh)
if err != nil {
return err
}
rm := &RollbackMessage{
Type: RollbackMessageType_SET_HASH.Enum(),
Data: rhb,
}
if _, err := ms.WriteMessage(rm); err != nil {
return err
}
return checkResponse(ms)
}
示例6: AuthenticatePrincipal
// AuthenticatePrincipal is a client method used to send a request to a
// ResourceMaster to authenticate a principal with a given certificate and a
// given set of keys.
func AuthenticatePrincipal(ms util.MessageStream, key *tao.Keys, derCert []byte) error {
// Send the authentication request, which supposes that a server is
// waiting to receive this request.
c := &Message{
Type: MessageType_AUTH_CERT.Enum(),
Data: derCert,
}
if _, err := ms.WriteMessage(c); err != nil {
return err
}
// Receive a challenge nonce from the server.
var nc Message
if err := ms.ReadMessage(&nc); err != nil {
return err
}
if *nc.Type != MessageType_NONCE_CHALL {
return fmt.Errorf("didn't receive NONCE_CHALL from the server")
}
// Sign the nonce.
sn := &Message{
Type: MessageType_SIGNED_NONCE.Enum(),
}
var err error
if sn.Data, err = key.SigningKey.Sign(nc.Data, ChallengeContext); err != nil {
return err
}
if _, err := ms.WriteMessage(sn); err != nil {
return err
}
// Get the result from the server after verificaton.
res, err := readResult(ms)
if err != nil {
return err
}
if !res {
return fmt.Errorf("the signed nonce failed verification")
}
return nil
}
示例7: GetCounter
// GetCounter implements RollbackMessageType_GET_COUNTER and returns the current
// value of a counter to the requestor.
func (r *RollbackMaster) GetCounter(ms *util.MessageStream, name string) error {
var emptyData []byte
rr := &RollbackResponse{
Type: RollbackMessageType_ERROR.Enum(),
Data: emptyData,
}
p := r.FindRollbackProgram(name)
if p == nil {
if _, err := ms.WriteMessage(rr); err != nil {
return err
}
return fmt.Errorf("couldn't find a rollback program with name %s", name)
}
rr.Type = RollbackMessageType_GET_COUNTER.Enum()
rr.Data = EncodeCounter(p.MonotonicCounter)
_, err := ms.WriteMessage(rr)
return err
}
示例8: GetHashedVerifier
// GetHashedVerifier gets the hash of the counter and the item hash for a given
// item.
func GetHashedVerifier(ms *util.MessageStream, item string) ([]byte, error) {
rm := &RollbackMessage{
Type: RollbackMessageType_GET_HASHED_VERIFIER.Enum(),
Data: []byte(item),
}
if _, err := ms.WriteMessage(rm); err != nil {
return nil, err
}
// We can't use checkResponse here since we need to get the value out of
// the response to read the hash.
var rr RollbackResponse
if err := ms.ReadMessage(&rr); err != nil {
return nil, err
}
if *rr.Type == RollbackMessageType_ERROR {
return nil, fmt.Errorf("couldn't set the counter on the remote server")
}
return rr.Data, nil
}
示例9: sendOperation
// sendOperation is a helper method that sets up the data structures needed for
// a FileOperation message like CREATE, WRITE, or READ, and sends this message
// on the MessageStream.
func sendOperation(ms util.MessageStream, mt MessageType, cert []byte, name string) error {
fop := &FileOperation{
Subject: cert,
Name: proto.String(name),
}
fopb, err := proto.Marshal(fop)
if err != nil {
return err
}
m := &Message{
Type: mt.Enum(),
Data: fopb,
}
if _, err := ms.WriteMessage(m); err != nil {
return err
}
return nil
}
示例10: sendResponse
func sendResponse(ms util.MessageStream, resp *taoca.Response) {
_, err := ms.WriteMessage(resp)
if err != nil {
fmt.Printf("error writing response: %s\n", err)
}
}
示例11: SendFile
//.........这里部分代码省略.........
ctr = cipher.NewCTR(dec, iv)
if ctr == nil {
return fmt.Errorf("can't create AES-CTR encryption")
}
// Remove the HMAC-SHA256 output from the bytes to check.
left = left - int64(hmacSize)
// Secure decryption in this case requires reading the file
// twice: once to check the MAC, and once to decrypt the bytes.
// The MAC must be checked before *any* decryption occurs and
// before *any* decrypted bytes are sent to the receiver.
for {
// Figure out how many bytes to read on this iteration.
readSize := int64(bufferSize)
final := false
if left <= bufferSize {
readSize = left
final = true
}
// Read the (maybe encrypted) bytes from the file.
n, err := file.Read(buf[:readSize])
if err != nil {
return err
}
left = left - int64(n)
hm.Write(buf[:n])
if final {
break
}
}
computed := hm.Sum(nil)
original := buf[:hmacSize]
// Read the file's version of the HMAC and check it securely
// against the computed version.
if _, err := file.Read(original); err != nil {
return err
}
if !hmac.Equal(computed, original) {
return fmt.Errorf("invalid file HMAC on decryption for file '%s'", fullpath)
}
// Go back to the beginning of the file (minus the IV) for
// decryption.
if _, err := file.Seek(ivSize, 0); err != nil {
return fmt.Errorf("couldn't seek back to the beginning of file '%s': %s", fullpath, err)
}
// Reset the number of bytes so it only includes the encrypted
// bytes.
left = fileInfo.Size() - int64(ivSize+hmacSize)
}
// The input buffer, and a temporary buffer for holding decrypted
// plaintext.
temp := make([]byte, bufferSize)
// Set up a framing message to use to send the data.
m := &Message{
Type: MessageType_FILE_NEXT.Enum(),
}
// Now that the integrity of the data has been verified, if needed, send
// the data (after decryption, if necessary) to the receiver.
for {
// Figure out how many bytes to read on this iteration.
readSize := int64(bufferSize)
final := false
if left <= bufferSize {
readSize = left
final = true
m.Type = MessageType_FILE_LAST.Enum()
}
// Read the (maybe encrypted) bytes from the file.
n, err := file.Read(buf[:readSize])
if err != nil {
return err
}
left = left - int64(n)
if hasKeys {
ctr.XORKeyStream(temp[:n], buf[:n])
m.Data = temp[:n]
} else {
m.Data = buf[:n]
}
// Send the decrypted data to the receiver.
if _, err := ms.WriteMessage(m); err != nil {
return err
}
if final {
break
}
}
return nil
}