@ -1805,6 +1805,20 @@ fileprivate extension LibSessionSpec {
// MARK: - G R O U P _ I N F O
fileprivate extension LibSessionSpec {
// / T h i s f u n c t i o n c a n b e u s e d t o r e g e n e r a t e t h e h a r d - c o d e d ` k e y s D u m p ` v a l u e i f n e e d e d d u e t o ` l i b S e s s i o n ` c h a n g e s
// / r e s u l t i n g i n t h e d u m p c h a n g i n g
private static func generateKeysDump ( for keysConf : UnsafeMutablePointer < config_group_keys > ? ) throws -> String {
var dumpResult : UnsafeMutablePointer < UInt8 > ? = nil
var dumpResultLen : Int = 0
try CExceptionHelper . performSafely {
groups_keys_dump ( keysConf , & dumpResult , & dumpResultLen )
}
let dumpData : Data = Data ( bytes : dumpResult ! , count : dumpResultLen )
dumpResult ? . deallocate ( )
return dumpData . toHexString ( )
}
class func groupInfoSpec ( ) {
context ( " GROUP_INFO " ) {
// MARK: - - g e n e r a t e s c o n f i g c o r r e c t l y
@ -1814,8 +1828,24 @@ fileprivate extension LibSessionSpec {
hex : " 0123456789abcdef0123456789abcdeffedcba9876543210fedcba9876543210 "
)
// S i n c e w e c a n ' t t e s t t h e g r o u p w i t h o u t e n c r y p t i o n k e y s a n d t h e C A P I d o e s n ' t h a v e
// a w a y t o m a n u a l l y p r o v i d e e n c r y p t i o n k e y s w e n e e d e d t o c r e a t e a d u m p w i t h v a l i d
// k e y d a t a a n d l o a d t h a t i n s o w e c a n t e s t t h e o t h e r c a s e s , t h i s d u m p c o n t a i n s a
// s i n g l e a d m i n m e m b e r a n d a s i n g l e e n c r y p t i o n k e y
let keysDump : Data = Data ( hex : " 64363a6163746976656c65343a6b6579736c6565 " )
let cachedKeysDump : ( data : UnsafePointer < UInt8 > , length : Int ) ? = keysDump . withUnsafeBytes { unsafeBytes in
return unsafeBytes . baseAddress . map {
(
$0 . assumingMemoryBound ( to : UInt8 . self ) ,
unsafeBytes . count
)
}
}
// FIXME: W o u l d b e g o o d t o m o v e t h e s e i n t o t h e l i b S e s s i o n - u t i l i n s t e a d o f u s i n g S o d i u m s e p a r a t e l y
let identity = try ! Identity . generate ( from : userSeed )
let keyPair : KeyPair = Crypto ( ) . generate ( . ed25519KeyPair ( seed : seed ) ) !
var userEdSK : [ UInt8 ] = identity . ed25519KeyPair . secretKey
var edPK : [ UInt8 ] = keyPair . publicKey
var edSK : [ UInt8 ] = keyPair . secretKey
@ -1828,9 +1858,18 @@ fileprivate extension LibSessionSpec {
var conf : UnsafeMutablePointer < config_object > ? = nil
expect ( groups_info_init ( & conf , & edPK , & edSK , nil , 0 , & error ) ) . to ( equal ( 0 ) )
var membersConf : UnsafeMutablePointer < config_object > ? = nil
expect ( groups_members_init ( & membersConf , & edPK , & edSK , nil , 0 , & error ) ) . to ( equal ( 0 ) )
var keysConf1 : UnsafeMutablePointer < config_group_keys > ? = nil
expect ( groups_keys_init ( & keysConf1 , & userEdSK , & edPK , & edSK , conf , membersConf , cachedKeysDump ? . data , ( cachedKeysDump ? . length ? ? 0 ) , & error ) ) . to ( equal ( 0 ) )
var conf2 : UnsafeMutablePointer < config_object > ? = nil
expect ( groups_info_init ( & conf2 , & edPK , & edSK , nil , 0 , & error ) ) . to ( equal ( 0 ) )
var keysConf2 : UnsafeMutablePointer < config_group_keys > ? = nil
expect ( groups_keys_init ( & keysConf2 , & userEdSK , & edPK , & edSK , conf2 , membersConf , cachedKeysDump ? . data , ( cachedKeysDump ? . length ? ? 0 ) , & error ) ) . to ( equal ( 0 ) )
expect ( groups_info_set_name ( conf , " GROUP Name " ) ) . to ( equal ( 0 ) )
expect ( config_needs_push ( conf ) ) . to ( beTrue ( ) )
expect ( config_needs_dump ( conf ) ) . to ( beTrue ( ) )