package com.sunyard.sge.database; import com.sunyard.SydApiException; public class SydSM3 implements ISM3 { private boolean is_finished = false; private SydApi api; private byte[] pcProcData; public SydSM3(SydApi sydApi) { this.api = sydApi; } public void update(byte[] pcData) { if (is_finished) { throw new SydApiException(0x8007); } if (null == pcData || 0 == pcData.length) { pcData = new byte[0]; } if (pcData.length > 4064) { throw new IllegalArgumentException(); } if (null == this.pcProcData) { LongDataReturn stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(pcData, 1, null); this.pcProcData = stringStringLongDataReturn.getProcData(); } else { LongDataReturn stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(pcData, 2, pcProcData); this.pcProcData = stringStringLongDataReturn.getProcData(); } } public byte[] digest() { if (is_finished) { throw new SydApiException(0x8007); } this.is_finished = true; if (null == pcProcData) { LongDataReturn stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(new byte[0], 0, null); return stringStringLongDataReturn.getData(); } else { LongDataReturn stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(new byte[0], 3, pcProcData); return stringStringLongDataReturn.getData(); } } }