// See file LICENSE for more information. library impl.padding.iso7816d4; import 'dart:typed_data' show Uint8List; import 'package:pointycastle/api.dart'; import 'package:pointycastle/src/impl/base_padding.dart'; import 'package:pointycastle/src/registry/registry.dart'; /// A padder that adds the padding according to the scheme referenced in /// ISO 7814-4 - scheme 2 from ISO 9797-1. The first byte is 0x80, rest is 0x00 class ISO7816d4Padding extends BasePadding { static final FactoryConfig factoryConfig = StaticFactoryConfig(Padding, 'ISO7816-4', () => ISO7816d4Padding()); @override String get algorithmName => 'ISO7816-4'; @override void init([CipherParameters? params]) { // nothing to do. } /// add the pad bytes to the passed in block, returning the /// number of bytes added. @override int addPadding(Uint8List data, int offset) { var added = data.length - offset; data[offset] = 0x80; offset++; while (offset < data.length) { data[offset] = 0; offset++; } return added; } /// return the number of pad bytes present in the block. @override int padCount(Uint8List data) { var count = data.length - 1; while (count > 0 && data[count] == 0) { count--; } if (data[count] != 0x80) { throw ArgumentError('pad block corrupted'); } return data.length - count; } }