23 #include "mrmailbox_internal.h" 26 #include "mrkeyring.h" 35 mrkeyring_t* mrkeyring_new()
39 if( (ths=calloc(1,
sizeof(mrkeyring_t)))==NULL ) {
46 void mrkeyring_unref(mrkeyring_t* ths)
53 for( i = 0; i < ths->m_count; i++ ) {
54 mrkey_unref(ths->m_keys[i]);
61 void mrkeyring_add(mrkeyring_t* ths, mrkey_t* to_add)
63 if( ths==NULL || to_add==NULL ) {
68 if( ths->m_count == ths->m_allocated ) {
69 int newsize = (ths->m_allocated * 2) + 10;
70 if( (ths->m_keys=realloc(ths->m_keys, newsize*
sizeof(mrkey_t*)))==NULL ) {
73 ths->m_allocated = newsize;
76 ths->m_keys[ths->m_count] = mrkey_ref(to_add);
81 int mrkeyring_load_self_private_for_decrypting__(mrkeyring_t* ths,
const char* self_addr, mrsqlite3_t* sql)
86 if( ths==NULL || self_addr==NULL || sql==NULL ) {
90 stmt = mrsqlite3_predefine__(sql, SELECT_private_key_FROM_keypairs_ORDER_BY_default,
91 "SELECT private_key FROM keypairs ORDER BY addr=? DESC, is_default DESC;");
92 sqlite3_bind_text (stmt, 1, self_addr, -1, SQLITE_STATIC);
93 while( sqlite3_step(stmt) == SQLITE_ROW ) {
95 if( mrkey_set_from_stmt(key, stmt, 0, MR_PRIVATE) ) {
96 mrkeyring_add(ths, key);