3535from ..anoncreds .models .schema import SchemaState
3636from ..cache .base import BaseCache
3737from ..core .profile import Profile , ProfileSession
38+ from ..indy .constants import CATEGORY_REV_REG
3839from ..indy .credx .holder import CATEGORY_LINK_SECRET , IndyCredxHolder
3940from ..ledger .multiple_ledger .ledger_requests_executor import (
4041 GET_CRED_DEF ,
@@ -119,12 +120,14 @@ def __init__(
119120 rev_reg_def : RevRegDef ,
120121 rev_reg_def_private : RevocationRegistryDefinitionPrivate ,
121122 active : bool = False ,
123+ accum : Optional [str ] = None ,
122124 ):
123125 """Initialize rev reg def upgrade object."""
124126 self .rev_reg_def_id = rev_reg_def_id
125127 self .rev_reg_def = rev_reg_def
126128 self .rev_reg_def_private = rev_reg_def_private
127129 self .active = active
130+ self .accum = accum
128131
129132
130133class RevListUpgradeObj :
@@ -242,6 +245,8 @@ async def get_rev_reg_def_upgrade_object(
242245 askar_reg_rev_def_private = await storage .get_record (
243246 CATEGORY_REV_REG_DEF_PRIVATE , rev_reg_def_id
244247 )
248+ accum_record = await storage .get_record (CATEGORY_REV_REG , rev_reg_def_id )
249+ accum_value = json .loads (accum_record .value )["value" ]["accum" ]
245250
246251 revoc_reg_def_values = json .loads (askar_issuer_rev_reg_def .value )
247252
@@ -261,7 +266,11 @@ async def get_rev_reg_def_upgrade_object(
261266 )
262267
263268 return RevRegDefUpgradeObj (
264- rev_reg_def_id , rev_reg_def , askar_reg_rev_def_private .value , is_active
269+ rev_reg_def_id ,
270+ rev_reg_def ,
271+ askar_reg_rev_def_private .value ,
272+ is_active ,
273+ accum_value ,
265274 )
266275
267276
@@ -277,18 +286,19 @@ async def get_rev_list_upgrade_object(
277286 {"rev_reg_id" : rev_reg_def_upgrade_obj .rev_reg_def_id },
278287 )
279288
280- revocation_list = [0 ] * rev_reg .value .max_cred_num
289+ # We need to increase the list by 1 here because the first index
290+ # is reserved by the cryptographic algorithm and the previous record
291+ # goes up to max_cred_num as numbers and not a list of truthy values
292+ revocation_list = [0 ] * (rev_reg .value .max_cred_num + 1 )
281293 for askar_cred_rev_record in askar_cred_rev_records :
282294 if askar_cred_rev_record .tags .get ("state" ) == "revoked" :
283- revocation_list [int (askar_cred_rev_record .tags .get ("cred_rev_id" )) - 1 ] = 1
295+ revocation_list [int (askar_cred_rev_record .tags .get ("cred_rev_id" ))] = 1
284296
285297 rev_list = RevList (
286298 issuer_id = rev_reg .issuer_id ,
287299 rev_reg_def_id = rev_reg_def_upgrade_obj .rev_reg_def_id ,
288300 revocation_list = revocation_list ,
289- current_accumulator = json .loads (
290- rev_reg_def_upgrade_obj .askar_issuer_rev_reg_def .value
291- )["revoc_reg_entry" ]["value" ]["accum" ],
301+ current_accumulator = rev_reg_def_upgrade_obj .accum ,
292302 )
293303
294304 return RevListUpgradeObj (
@@ -400,7 +410,8 @@ async def upgrade_and_delete_rev_entry_records(
400410 txn : ProfileSession , rev_list_upgrade_obj : RevListUpgradeObj
401411) -> None :
402412 """Upgrade and delete revocation entry records."""
403- next_index = 0
413+ # 0 index is reserved by the crypto algorithm
414+ next_index = 1
404415 for cred_rev_record in rev_list_upgrade_obj .cred_rev_records :
405416 if int (cred_rev_record .tags .get ("cred_rev_id" )) > next_index :
406417 next_index = int (cred_rev_record .tags .get ("cred_rev_id" ))
@@ -467,6 +478,7 @@ async def get_rev_reg_def_upgrade_objs(
467478 ),
468479 key = lambda x : json .loads (x .value )["created_at" ],
469480 )
481+
470482 found_active = False
471483 is_active = False
472484 for askar_issuer_rev_reg_def in askar_issuer_rev_reg_def_records :
0 commit comments