| // Copyright 2016 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package internal |
| |
| import ( |
| "crypto/sha256" |
| "io" |
| "os" |
| "time" |
| |
| "github.com/pborman/uuid" |
| |
| "messenger/ifc" |
| ) |
| |
| func NewMessageId() string { |
| return uuid.New() |
| } |
| |
| // NewMessageFromFile creates a new Message for the content of the given file. |
| // The Message's Id, CreationTime, Length, and Sha256 fields are populated. |
| func NewMessageFromFile(file string) (ifc.Message, error) { |
| f, err := os.Open(file) |
| if err != nil { |
| return ifc.Message{}, err |
| } |
| defer f.Close() |
| h := sha256.New() |
| size := int64(0) |
| buf := make([]byte, 2048) |
| for { |
| n, err := f.Read(buf) |
| if n > 0 { |
| size += int64(n) |
| h.Write(buf[:n]) |
| } |
| if err == io.EOF { |
| break |
| } |
| if err != nil { |
| return ifc.Message{}, err |
| } |
| } |
| return ifc.Message{ |
| Id: NewMessageId(), |
| CreationTime: time.Now(), |
| Length: size, |
| Sha256: h.Sum(nil), |
| }, nil |
| } |
| |
| // NewMessageFromBytes creates a new Message for the given content. |
| // The Message's Id, CreationTime, Length, and Sha256 fields are populated. |
| func NewMessageFromBytes(b []byte) ifc.Message { |
| h := sha256.New() |
| h.Write(b) |
| return ifc.Message{ |
| Id: NewMessageId(), |
| CreationTime: time.Now(), |
| Length: int64(len(b)), |
| Sha256: h.Sum(nil), |
| } |
| } |